home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / tcxl32.arc / TCXL.DOC < prev    next >
Text File  |  1988-05-01  |  115KB  |  3,481 lines

  1.  
  2.                                     T C X L
  3.                     An Extended Function Library for Turbo C
  4.                                   Version 3.2
  5.                                  by Mike Smedley
  6.                        (c) 1987, 1988  All Rights Reserved
  7.  
  8.     This library is intended to be a supplement to the Turbo C function
  9. library.  It contains over 150 functions designed for use with the tiny and
  10. small memory models.  Libraries for the other models are provided with
  11. registration.  This library was compiled with Turbo C 1.5, however, you do not
  12. need TC 1.5 to use this library.  The following files should be included in
  13. this archive:
  14.  
  15.                 TCXL.DOC      - the library documentation
  16.                 TCXL.H        - header file for all functions
  17.                 TCXL.LIB      - the object code library
  18.                 TCXLDEF.H     - header file for miscellaneous functions
  19.                 TCXLDEMO.C    - the demonstration program source code
  20.                 TCXLDEMO.EXE  - the demonstration program
  21.                 TCXLDEMO.MAK  - the make file used for compiling the demo
  22.                 TCXLDEMO.PRJ  - project file used for compiling the demo
  23.                 TCXLDSK.H     - header file for disk functions
  24.                 TCXLEMS.H     - header file for EMS functions
  25.                 TCXLHIST.DOC  - history of changes
  26.                 TCXLKEY.H     - header file for keyboard functions
  27.                 TCXLMOU.H     - header file for mouse functions
  28.                 TCXLPRN.H     - header file for printer functions
  29.                 TCXLQREF.DOC  - quick reference for TCXL functions
  30.                 TCXLSTR.H     - header file for string functions
  31.                 TCXLVID.H     - header file for video functions
  32.                 TCXLWIN.H     - header file for windowing functions
  33.  
  34.  
  35. Features of the TCXL Function Library.
  36.  
  37.             -   Windowing with multiple windows
  38.             -   Lotus/Intel/Microsoft EMS memory usage
  39.             -   EGA 43-line and VGA 50-line modes
  40.             -   Mouse functions for Microsoft compatible mice
  41.             -   Direct screen writing for fast screen writes
  42.             -   Screen/window swapping to memory or disk
  43.             -   DESQview window compatibility
  44.             -   Advanced string manipulation
  45.             -   String Pattern matching
  46.             -   Data encryption
  47.             -   Multi-field keyboard input from within windows
  48.             -   Bar-selection menus
  49.             -   Formatted keyboard input
  50.             -   Equipment detection
  51.             -   Printing functions
  52.             -   Sound
  53.             -   and more!
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.                                       1    
  61.  
  62.  
  63.  
  64. Registration Information.
  65.  
  66.     You are free to copy and distribute this library freely, however, if you
  67. find this library of use to you, you are encouraged to register your copy.  The
  68. registration cost is $20.  Included in this registration cost is technical
  69. support; libraries for the Medium, Compact, Large, and Huge memory models;
  70. low-cost upgrades to future revisions; and best of all, the complete library
  71. source code!  This library may not be used in commercial applications without
  72. registration.  To register, please send payment to:
  73.  
  74.                     Mike Smedley
  75.                     2441 N.E. Loop 410
  76.                     San Antonio, TX 78217
  77.  
  78.  
  79.     Or, for more information, I can be reached at one of the following points
  80. of contact:
  81.  
  82.         Telephone       -   (512) 590-2910  (no collect calls, please)
  83.         CompuServe      -   User ID:  71331,2244
  84.         Abbey Road BBS  -   (512) 590-6036  1200/2400/9600 8-N-1
  85.         Telstar BBS     -   (512) 822-8882  1200/2400 8-N-1
  86.  
  87.  
  88.  
  89. DISCLAIMER:  The author claims no responsibility for any damages caused by the
  90. use or misuse of this library.  This product is distributed "as is" with no
  91. warranty expressed or implied.
  92.  
  93.  
  94. Trademarks Used:
  95.  
  96.     CompuServe is a registered trademark of CompuServe Incorporated.
  97.     DESQview is a trademark of Quarterdeck Office Systems.
  98.     Epson is a registered trademark of Seiko Epson Corporation.
  99.     IBM is a registered trademark of International Business Machines.
  100.     LIM and EMS are trademarks of Lotus, Intel, and Microsoft Corporations.
  101.     Microsoft is a registered trademark of Microsoft Corporation.
  102.     Turbo C is a registered trademark of Borland International.
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.                                       2    
  121.  
  122.  
  123.  
  124.  
  125.  
  126. Calling TCXL Functions from Turbo C.
  127.  
  128.  
  129.     To call these functions from Turbo C, you will need to have a line in your
  130. source code file including the appropriate TCXL header file.  Example:
  131.  
  132.         #include "tcxlwin.h"
  133.  
  134.     You will also need to link in the TCXL.LIB file when you link your program.
  135. You can do this in one of three ways:
  136.  
  137.         1.  Compile & link from the environment.  Your project (.PRJ) file
  138.             must contain 'TCXL.LIB' in it.  It should look like:
  139.  
  140.                 myfile tcxl.lib
  141.  
  142.         2.  Compile & link from the command line.  Type:
  143.  
  144.                 tcc myfile tcxl.lib
  145.  
  146.         3.  Command line link only.  Type:
  147.  
  148.                 tlink c0s myfile,myfile,,tcxl emu maths cs /c/x
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.                                       3    
  181.  
  182.  
  183. Calling TCXL Functions from Assembly Language.
  184.  
  185.  
  186.     Most of TCXL's functions (excluding macro-functions) can be called by
  187. assembly language.  Some functions will require the Turbo C CS.LIB library to
  188. be linked in also.  Any TCXL function which calls the Turbo C malloc() function
  189. cannot be called by an assembly program because malloc() needs information from
  190. the C0S.OBJ startup code.  Functions that use malloc() include some string
  191. functions, screen save/restore functions, and windowing functions.
  192.   
  193.     Turbo C passes its arguments to a function via the stack.  Arguments are
  194. pushed onto the stack in reverse order.  Turbo C places the underscore symbol
  195. preceeding the function name, so to call the getns() function, you must call it
  196. by _getns.  After the call to the function, you must readjust the stack.  For
  197. every push on the stack, the stack pointer needs to be incremented by 2.  The
  198. return value (if any) will be in the AX register.  Functions that return 16-bit
  199. values will have the high value in DX and the low value in AX.  Here's an
  200. example for the getns() function:
  201.  
  202.             EXTRN   _getns:NEAR         ; so assembler won't flag an error
  203.             mov     ax,30               ; maximum length of input string
  204.             push    ax                  ; push it onto the stack
  205.             mov     ax,OFFSET straddr   ; address of string to receive input
  206.             push    ax                  ; push it onto the stack
  207.             call    _getns              ; call the function
  208.             add     sp,4                ; adjust stack 2 for every argument
  209.             or      ax,ax               ; is return value = 0?
  210.             jnz     exitprog            ; no, Esc was pressed, exit program
  211.             (rest of program)
  212.  
  213.     Here's how to assemble and link your assembly language program with the
  214. TCXL function library:
  215.  
  216.         1.  Assemble your assembly source code file with the case-sensitive
  217.             switch on:
  218.  
  219.                 masm /mx myfile ;
  220.  
  221.         2.  Link your object file specifying TCXL as a library:
  222.  
  223.                 link myfile,,,tcxl cs
  224.  
  225.         3.  Convert to a .COM file if applicable:
  226.  
  227.                 exe2bin myfile myfile.com
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.                                       4    
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247. Using TCXL's Windowing Functions.
  248.  
  249.  
  250.     TCXL has a a powerful windowing system that can be very useful in an
  251. application program.  All windowing functions are prefixed with a 'w'.  The
  252. windowing is controlled by TCXL's window manager which is called by every
  253. windowing function.  The window manager keeps track of which window is active;
  254. each window's position, cursor location, attributes, etc.; how many windows are
  255. open; and other information.  All windowing functions set the _werrno global
  256. variable before returning.  The literal value of this variable can be viewed
  257. by calling the werrmsg() function.
  258.  
  259.     You may open as many windows as memory permits.  Once a window is opened,
  260. it immediately becomes the active window.  TCXL's windowing functions can only
  261. be performed on the active window.  If you want to perform a function on a
  262. inactive window, you must activate it first.  See the supplied TCXLDEMO.C
  263. program for a complete example of how to use the windowing system.
  264.  
  265.  
  266.     Example:
  267.  
  268.         int w1,w2;                              /*  window handles  */
  269.         w1=wopen(0,0,10,40,0,LCYAN|_BLUE);      /*  open 1st window  */
  270.         if(!w1) error_routine();                /*  check for error  */
  271.         waitkey();                              /*  wait for keypress  */
  272.         wputs("Hello, ");
  273.         waitkey();                              /*  wait for keypress  */
  274.         w2=wopen(7,20,18,60,2,LRED|_MAGENTA);   /*  open 2nd window  */
  275.         if(!w2) error_routine();                /*  check for error  */
  276.         wputs("Hello, ");
  277.         waitkey();                              /*  wait for keypress  */
  278.         if(wactiv(w1)) error_routine();         /*  activate 1st window  */
  279.         wputs("there");
  280.         waitkey();                              /*  wait for keypress  */
  281.         if(wactiv(w2)) error_routine();         /*  activate 2nd window  */
  282.         wputs("there");
  283.         waitkey();                              /*  wait for keypress  */
  284.         wclose();                               /*  close 2nd window  */
  285.         waitkey();                              /*  wait for keypress  */
  286.         wclose();                               /*  close 1st window  */
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.                                       5    
  301.  
  302.  
  303. Using TCXL's Expanded Memory Specification (EMS) Functions.
  304.  
  305.  
  306.     TCXL contains several functions for simple management of expanded memory.
  307. All of TCXL's EMS functions are prefixed with 'ems'.  For those not familiar
  308. with expanded memory, I will briefly explain it.
  309.  
  310.     The 8088 microprocessor is only able to address 1 Megabyte of memory.  When
  311. applications started needing more memory, Lotus, Intel, and Microsoft developed
  312. the Expanded Memory Specification.  This specification allows access to more
  313. than 1 Megabyte of memory by mapping 16K 'windows' of memory on an expanded
  314. memory board in and out of an unused area of DOS memory.  The Expanded Memory
  315. Manager (EMM) is a software driver that controls the mapping.
  316.  
  317.     Physical pages are 16K blocks of memory which are located in an unused area
  318. of DOS memory.  There are typically 4 physical pages comprising a 64K
  319. contiguous area of mappable DOS memory.  The EMS page frame base address points
  320. to the beginning of the first physical page. Logical pages are 16K blocks of
  321. memory on the expanded memory board.  There can be as many logical pages as the
  322. expanded memory board has, up to 8 Megabytes.
  323.  
  324.     Every program that uses expanded memory must do the following:
  325.  
  326.         1.  determine if the EMM device driver is loaded
  327.         2.  determine if there are enough free pages for its application
  328.         3.  allocate pages of expanded memory
  329.         4.  find out what the EMS page frame base address is
  330.         5.  map logical pages onto physical pages
  331.         6.  deallocate pages when finished with them
  332.  
  333.     Here's an example of using TCXL's EMS functions to perform these
  334. procedures:
  335.  
  336.         int handle1,handle2;
  337.         char buf[14];
  338.         if(!emsexist()) {                   /* check for the EMM driver      */
  339.             printf("EMM not loaded\n");
  340.             exit(1);
  341.         }
  342.         handle1=emsalloc(2);                /* request 2 pages of EMS memory */
  343.         handle2=emsalloc(2);                /* request 2 more pages          */
  344.         if((!emsh1)||(!emsh2)) {            /* test for allocation error     */
  345.             printf("EMS allocation error\n");
  346.             exit(1);
  347.         }
  348.         emsmap(handle1,0,0);                /* map logical page 0 of handle 1
  349.                                                to physical page 0            */
  350.         emswrite("Hello, world",0,13);      /* write a string at offset 0,
  351.                                                automatically determines what
  352.                                                the page frame address is     */
  353.         emsmap(emsh2,0,0);                  /* map logical page 0 of handle 2
  354.                                                to physical page 0            */
  355.         emswrite("How are you?",0,13);      /* write a string at offset 0    */
  356.         emsmap(handle1,0,0);                /* map logical page 0 of handle 1
  357.                                                to physical page 0            */
  358.  
  359.  
  360.                                       6    
  361.         emsread(buf,0,13);                  /* read 13 bytes from offset 0
  362.                                                into buffer                   */
  363.         printf("buf = %s\n",buf);           /* display buffer contents       */
  364.         emsmap(handle2,0,0);                /* map logical page 0 of handle 2
  365.                                                to physical page 0            */
  366.         emsread(buf,0,13);                  /* read 13 bytes from offset 0
  367.                                                into buffer                   */
  368.         printf("buf = %s\n",buf);           /* display buffer contents       */
  369.         emsdealloc(handle2);                /* deallocate pages belonging to
  370.                                                handle 2                      */
  371.         emsdealloc(handle1);                /* deallocate pages belonging to
  372.                                                handle 1                      */
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.                                       7    
  421.  
  422.  
  423. Using TCXL's inputsf() and winputsf() Functions.
  424.  
  425.  
  426.     The inputsf() and winputsf() functions in TCXL accept keyboard input
  427. through the use of TCXL's own input format strings.  These format strings are
  428. not the same as what scanf() uses.  They have the ability to restrict and
  429. convert input for each character received from the keyboard.  They also allow
  430. for custom prompts between each character input.  The format control characters
  431. can be in any order in the string, but all letters must be in the case shown
  432. here.  Invalid control characters will cause the function to return an error
  433. and the receiving string will be null. Spaces can be used to improve
  434. readability of the format string.  If the Escape key is not disabled, when
  435. pressed it will return an error code and the receiving string will be null.
  436. Valid control characters are:
  437.  
  438.             !.......!   - start and end exclamation points, any letters
  439.                           between them are format command toggles.  The
  440.                           valid format command toggles are:
  441.  
  442.                             -   - decreases text attribute, works with
  443.                                   winputsf() only
  444.  
  445.                             +   - increases text attribute, works with
  446.                                   winputsf() only
  447.  
  448.                             C   - toggles copying of display (quoted)
  449.                                   characters to the receiving string.
  450.                                   (default is off)
  451.  
  452.                             E   - toggles Escape key checking off/on.
  453.                                   When off, if the Escape key is pressed,
  454.                                   the function returns an error code and
  455.                                   the string will be null.   The default
  456.                                   for inputsf() is on.  For winputsf(),
  457.                                   the default is the value of _wesc upon
  458.                                   calling.
  459.  
  460.                             L   - toggles lower-case conversion.  When on,
  461.                                   the case of input letters will be forced
  462.                                   to lower case.  (default is off)
  463.  
  464.                             M   - toggles mixed-case conversion.  When on,
  465.                                   the case of input letters will be forced
  466.                                   to upper-case for the first letter of
  467.                                   each word and lower-case for the
  468.                                   remaining letters.  (default is off)
  469.  
  470.                             R   - toggles return key checking.  When off,
  471.                                   the carriage return key will be ignored
  472.                                   until the end of the format string.
  473.                                   (default is on)
  474.  
  475.                             U   - toggles upper-case conversion.  When on,
  476.                                   the case of input letters will be forced
  477.                                   to upper-case.  (default is off)
  478.  
  479.  
  480.                                       8    
  481.  
  482.  
  483.             '.......'   - start and end single quotes, any characters
  484.                           between them will be displayed as text.  If the 'C'
  485.                           command toggle is on, the characters will also be
  486.                           copied to the receiving string.
  487.  
  488.             Character type codes:
  489.  
  490.             #   - accept numeric character '0' thru '9'
  491.             9   - accept numeric character '0' thru '9', '.', '-', and '+'
  492.             ?   - accept any character
  493.             A   - accept alpha character 'A' thru 'Z', 'a' thru 'z', and space
  494.             L   - accept alpha character 'A' thru 'Z', 'a' thru 'z', and space
  495.                   input character will be converted to lower case
  496.             M   - accept alpha character 'A' thru 'Z', 'a' thru 'z', and space
  497.                   input character will be converted to mixed case
  498.             P   - accept printable character (ASCII 20 thru 7E)
  499.             U   - accept alpha character 'A' thru 'Z', 'a' thru 'z', and space
  500.                   input character will be converted to upper case
  501.             X   - accept alphanumeric character 'A' thru 'Z', 'a' thru 'z',
  502.                   '0' thru '9', and space
  503.             Y   - accept a yes/no character 'Y', 'y', 'N', and 'n'
  504.  
  505.  
  506.             <.......>   - start and end angle brackets, accept a character
  507.                           from valid list of characters between angle brackets.
  508.  
  509.     Examples:
  510.  
  511.         inputsf(str,"'Enter name:  ' !UR! XXXXX !R! XXXXXXXXXX");
  512.  
  513.             Prompts for name, inputs string from keyboard converting characters
  514.             to upper case as it goes, allows up to 15 alphanumeric characters
  515.             as input.  The return key is disabled until at least 5 characters
  516.             have been entered.  Characters will be copied to str.  This space
  517.             must already be allocated!
  518.  
  519.  
  520.         inputsf(str,"!R! 'Enter phone:  '!C! '(' ### ') ' ### '-' ####");
  521.  
  522.             Prompts for a full phone number including area code, allows only
  523.             digit characters and displays format punctuation as it goes.  The
  524.             entire field must be filled before return can be pressed.  All of
  525.             the characters except the prompt will be copied to the receiving
  526.             string.  The input string will be copied to str, which must have
  527.             already been allocated.
  528.  
  529.  
  530.         inputsf(str,"!R!'Enter SSAN:  '<0123456>##'-'##'-'####");
  531.  
  532.             Prompts for a Social Security number.  Will not allow return to be
  533.             pressed until all digits have been entered.  The first digit of the
  534.             SSAN must be 0 - 6. Dashes will be displayed as you are typing in
  535.             the data, but will not be contained in the receiving string str.
  536.  
  537.  
  538.  
  539.  
  540.                                       9    
  541.         inputsf(str,"!R!'Enter DOB (MM/DD/YY):  '<01>#'/'<0123>#'/'##");
  542.  
  543.             Prompts for Date of Birth.  Allows only valid digits for the input
  544.             date.  Prevents the return key from working until all digits have
  545.             been typed in.
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.                                       10   
  601.  
  602.  
  603. Using TCXL's Multi-Field Window Input Functions.
  604.  
  605.  
  606.     Two functions are needed to process multi-field keyboard input from
  607. windows:  winpdef(), and winpread().  The winpdef() function sets up an input
  608. field.  For every input field you want defined, you must call winpdef().  It
  609. displays the current contents of what is to be the receiving string. The size
  610. of the string before winpdef() is called will be the size of the input field.
  611. You may need to resize the string before calling winpdef().  You can do this
  612. with the strsetsz() function.  The winpdef() function will also specify the
  613. type of the field.  Valid field types are:
  614.  
  615.         #   - allow only numeric characters '0' thru '9'
  616.         9   - allow only numeric characters '0' thru '9', '.', '-', and '+'
  617.         ?   - allow any characters
  618.         A   - allow only alpha characters 'A' thru 'Z', 'a' thru 'z', and space
  619.         L   - allow only alpha characters 'A' thru 'Z', 'a' thru 'z', and space
  620.               input characters will be converted to lower case
  621.         M   - allow only alpha characters 'A' thru 'Z', 'a' thru 'z', and space
  622.               input characters will be converted to mixed case
  623.         P   - allow only printable characters (ASCII 20 thru 7E)
  624.         U   - allow only alpha characters 'A' thru 'Z', 'a' thru 'z', and space
  625.               input characters will be converted to upper case
  626.         X   - allow only alphanumeric characters 'A' thru 'Z', 'a' thru 'z',
  627.               '0' thru '9', and space
  628.         Y   - allow only yes/no characters 'Y', 'y', 'N', and 'n'
  629.  
  630.     The case of the field type characters must be as shown.  For every input
  631. field you want defined, you must call winpdef().
  632.  
  633.     The winpread() function processes all fields defined with winpdef().  The
  634. user is allowed to move around and edit all of the fields.  Valid editing keys
  635. are:
  636.  
  637.         LeftArrow   - moves cursor left inside the field
  638.         RightArrow  - moves cursor right inside the field
  639.         UpArrow     - moves cursor to the previous field up
  640.         DownArrow   - moves cursor to the next field down
  641.         Tab         - moves cursor to the next field right
  642.         Shift-Tab   - moves cursor to the next field left
  643.         Enter       - if the cursor is in the last field on the screen, it will
  644.                       process all fields.  Otherwise it will skip to the next
  645.                       field
  646.         Ctrl-Enter  - processes all fields, wherever the cursor may be
  647.         Home        - moves cursor to beginning of field
  648.         End         - moves cursor to end of field
  649.         Ctrl-Home   - moves cursor to the beginning of the first field on the
  650.                       screen
  651.         Ctrl-End    - moves cursor to the end of the last field on the screen
  652.         Ins         - inserts a space at cursor location.  All text in the
  653.                       field will be shifted right.  The end character will be
  654.                       lost.
  655.         Del         - deletes character at the cursor location.  All text will
  656.                       be shifted left and a space will be placed at the end
  657.                       of the field.
  658.  
  659.  
  660.                                       11   
  661.         Esc         - if enabled, cancels input and returns a W_ESCPRESS value.
  662.                       Escape checking can be enabled or disabled by using the
  663.                       wsetesc() function before winpread() is called.
  664.  
  665.     After the winpread() is called, all fields defined with winpdef() will be
  666. cleared.  The receiving strings of all defined fields will now contain the data
  667. entered.  If Escape checking was on and the Esc key was pressed, then all
  668. receiving strings will contain the values they held before winpread() was
  669. called.
  670.  
  671.     Another function that can be used in multi-field keyboard input is the
  672. winpxcel() function.  What this does is cancel all fields defined with
  673. winpdef().  For winpxcel() to have any effect, it must be called before
  674. winpread() is.
  675.  
  676.  
  677.  
  678.  
  679.  
  680.  
  681.  
  682.  
  683.  
  684.  
  685.  
  686.  
  687.  
  688.  
  689.  
  690.  
  691.  
  692.  
  693.  
  694.  
  695.  
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.                                       12   
  721.  
  722.  
  723. Using TCXL's Window Bar-Selection Menus.
  724.  
  725.  
  726.     Two functions are needed to use TCXL's bar-selection menus:  wmbardef(),
  727. and wmbarget().  The wmbardef() function displays the menu option on the
  728. screen and assigns a tag character to it.  The tag character is used for
  729. identification of the menu option.  The tag character must be alphanumeric and
  730. is case insensitive.  For every menu option you have, the wmbardef() function
  731. must be called.  When all menu options have been defined, you will call the
  732. wmbarget() function.  This will allow the user to select one of the menu
  733. options by using the cursor keys or pressing the tag character's key.  The
  734. following keys can be used for movement of the selection bar:
  735.  
  736.         LeftArrow   - moves selection bar to previous option left.
  737.         RightArrow  - moves selection bar to next option right.
  738.         UpArrow     - moves selection bar to previous option up.
  739.         DownArrow   - moves selection bar to next option down.
  740.         Tab         - same as RightArrow.
  741.         Shift-Tab   - same as LeftArrow.
  742.         Enter       - selects the option that the selection bar is on.
  743.         Home        - moves selection bar to upper left option.
  744.         End         - moves selection bar to lower right option.
  745.         Esc         - if enabled, cancels input and returns a zero.  Escape
  746.                       checking can be enabled or disabled by using the
  747.                       wsetesc() function before wmbarget() is called.
  748.  
  749.     When an option is selected, it's tag character will be returned by
  750. wmbarget(). If the Esc key was pressed and Escape checking was on, a zero will
  751. be returned and the global variable _werrno will be set to W_ESCPRESS.  The
  752. wmbarget() function automatically clears all defined options once a selection
  753. is made.
  754.  
  755.     Another function that may be used for bar-selection menus is wmbarxcel().
  756. This can be used if you need to cancel all defined options before wmbarget() is
  757. called.
  758.  
  759. Example:
  760.  
  761.         int selection;
  762.         wopen(5,10,20,50,4,LMAGENTA|_RED);
  763.         wmbardef(2,2,LGREEN|_RED,"Add record",'A');
  764.         wmbardef(4,2,LGREEN|_RED,"Delete record",'D');
  765.         wmbardef(6,2,LGREEN|_RED,"Print record",'P');
  766.         wmbardef(8,2,LGREEN|_RED,"Update record",'U');
  767.         selection=wmbarget(LRED|_GREEN);
  768.         wgotoxy(9,2);
  769.         wprintf("You selected %c\n",selection);
  770.         waitkey();
  771.         wclose();
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.                                       13   
  781.  
  782.  
  783. Using TCXL's Mouse Functions.
  784.  
  785.  
  786.     TCXL has several functions used to facilitate Microsoft compatible mice.
  787. All of these functions are prefixed with a 'ms'.  These functions will work
  788. on Microsoft mice or other mice using a Microsoft compatible driver.  These
  789. mouse functions allow you to:
  790.  
  791.         1.  Initialize mouse/determine if mouse exists.
  792.         2.  Get the status of button presses/releases.
  793.         3.  Hide/reveal the mouse cursor.
  794.         4.  Get/set the mouse cursor position.
  795.         5.  Select type of mouse cursor (hardware or software).
  796.         5.  Adjust the mouse sensitivity (speed).
  797.         6.  Get information on direction of mouse movement.
  798.         7.  Establish horizontal/vertical boundries of mouse movement.
  799.  
  800.     When reading or setting mouse coordinates, the values used are in pixels.
  801. To calculate mouse coordinates in terms of column and row instead of X and Y,
  802. you would multiply character width by column, and character height by row.
  803. Typically, screen characters are 8 pixels wide by 8 pixels tall.  So, to
  804. position the mouse cursor at column 60, row 15, you would use:
  805.  
  806.         msgotoxy(60*8,15*8);
  807.  
  808.     The mscursor() function sets the cursor type.  It takes 3 parameters:
  809. ctype, smask, and cmask.  If ctype = 1 then the cursor type is hardware.  The
  810. hardware cursor is the flashing block on your screen.  If this type of cursor
  811. is used, it will interfere with normal text cursor functions.  When using the
  812. hardware cursor type, the value for smask is the start scan line of the cursor,
  813. and the value for cmask is the stop scan line of the cursor.  If the ctype
  814. parameter = 0, then a software cursor is used.  For the software cursor, the
  815. smask parameter is the screen mask, and the cmask parameter is the cursor mask.
  816. The screen mask determines which of the characters attributes are preserved.
  817. The cursor mask defines how the attributes are changed to show the cursor.  For
  818. both masks, the bit values are as follows:
  819.  
  820.         Bits 0-7:       ASCII value of character
  821.         Bits 8-10:      Foreground color
  822.         Bit 11:         Intensity
  823.         Bits 12-14:     Background color
  824.         Bit 15:         Blink
  825.  
  826.     The msmotion() function determines direction and distance traveled since
  827. last msmotion() call.  The xcount and ycount parameters will either be negative
  828. or positive depending on direction mouse moved.  The amount will be the number
  829. of pixels travelled.
  830.  
  831.     When updating the screen, the mouse cursor should be hidden with the
  832. mshidecur() function first, and then after the screen is updated, the
  833. msshowcur() should be called to re-display the mouse cursor.
  834.  
  835.  
  836.  
  837.  
  838.  
  839.  
  840.                                       14   
  841.  
  842.  
  843.                        Description of TCXL Functions
  844.                        -----------------------------
  845.  
  846.  
  847. Name:       attrib
  848. Purpose:    creates an attribute
  849. Prototype:  int attrib(int fore,int back,int bright,int blink);
  850. Header:     tcxlvid.h  tcxlwin.h
  851. Inputs:     fore    - foreground color code (0-7)
  852.             back    - background color code (0-7)
  853.             bright  - intensity (0-1)
  854.             blink   - blinking (0-1)
  855. Return:     attribute
  856. Also see:   setattr wtextattr
  857. Example:
  858.             prints(15,10,attrib(7,5,1,0),"Hello, world");
  859.  
  860.  
  861. Name:       beep
  862. Purpose:    sounds a beep in the speaker
  863. Prototype:  void beep(void);
  864. Header:     tcxldef.h
  865. Inputs:     none
  866. Return:     none
  867. Also see:   sound_
  868. Example:
  869.             beep();
  870.  
  871.  
  872. Name:       biosver
  873. Purpose:    returns the ROM BIOS version date
  874. Prototype:  char *biosver(void);
  875. Header:     tcxldef.h
  876. Inputs:     none
  877. Return:     address of the static string containing the ROM BIOS version date
  878. Also see:   machid
  879. Example:
  880.             printf("ROM BIOS version date is %s\n",biosver());
  881.  
  882.  
  883. Name:       box
  884. Purpose:    draws a box on the screen
  885. Prototype:  void box(int srow,int scol,int erow,int ecol,int btype,int atr);
  886. Header:     tcxlvid.h
  887. Inputs:     srow    - starting row upper left corner
  888.             scol    - starting column upper left corner
  889.             erow    - ending row lower right corner
  890.             ecol    - ending column
  891.             btype   - box type (0-5)
  892.             atr     - attribute
  893. Return:     none
  894. Also see:   attrib boxd
  895. Example:
  896.             box(0,0,22,79,1,WHITE|_BLUE);
  897.  
  898.  
  899.  
  900.                                       15   
  901.  
  902. Name:       boxd
  903. Purpose:    draws a box directly on the screen (no BIOS calls)
  904. Prototype:  void boxd(int srow,int scol,int erow,int ecol,int btype,int atr);
  905. Header:     tcxlvid.h
  906. Inputs:     srow    - starting row upper left corner
  907.             scol    - starting column upper left corner
  908.             erow    - ending row lower right corner
  909.             ecol    - ending column
  910.             btype   - box type (0-5)
  911.             atr     - attribute
  912. Return:     none
  913. Also see:   attrib box videoinit
  914. Example:
  915.             boxd(0,0,22,79,1,WHITE|_BLUE);
  916.  
  917.  
  918. Name:       capsoff
  919. Purpose:    toggles the CapsLock key off
  920. Prototype:  void capsoff(void);
  921. Header:     tcxlkey.h
  922. Inputs:     none
  923. Return:     none
  924. Also see:   capson kbstat numoff
  925. Example:
  926.             capsoff();
  927.  
  928.  
  929. Name:       capson
  930. Purpose:    toggles the CapsLock key on
  931. Prototype:  void capson(void);
  932. Header:     tcxlkey.h
  933. Inputs:     none
  934. Return:     none
  935. Also see:   capsoff kbstat numon
  936. Example:
  937.             capson();
  938.  
  939.  
  940. Name:       clearkeys
  941. Purpose:    clears the keyboard buffer
  942. Prototype:  void clearkeys(void);
  943. Header:     tcxlkey.h
  944. Inputs:     none
  945. Return:     none
  946. Also see:   waitkey
  947. Example:
  948.             int ch;
  949.             printf("Press a key:  ");
  950.             clearkeys();
  951.             ch=getche();
  952.  
  953.  
  954. Name:       clockcal
  955. Purpose:    determines if a clock-calendar board is installed (usually this
  956.             board will only be in XT machines)
  957. Prototype:  int clockcal(void);
  958.  
  959.  
  960.                                       16   
  961. Header:     tcxldef.h
  962. Inputs:     none
  963. Return:     a non-zero value if a clock-calendar board is present
  964. Example:
  965.             printf("A clock-calendar is%s installed\n",clockcal()?"":" not");
  966.  
  967.  
  968. Name:       clreol_
  969. Purpose:    clears to the end of line using current attribute
  970. Prototype:  void clreol_(void);
  971. Header:     tcxlvid.h
  972. Inputs:     none
  973. Return:     none
  974. Also see:   clrscrn clrwin
  975. Example:
  976.             prints(10,5,LCYAN|_BLUE,"Hello, worldXXXXXXXX");
  977.             gotoxy_(10,17);
  978.             clreol_();
  979.  
  980.  
  981. Name:       clrscrn
  982. Purpose:    clears the screen (up to 50 lines) using current attribute, and
  983.             homes the cursor
  984. Prototype:  void clrscrn(void);
  985. Header:     tcxlvid.h
  986. Inputs:     none
  987. Return:     none
  988. Also see:   clreol_ clrwin
  989. Example:
  990.             clrscrn();
  991.  
  992.  
  993. Name:       clrwin
  994. Purpose:    clears a window of the screen using current attribute
  995. Prototype:  void clrwin(srow,scol,erow,ecol);
  996. Header:     tcxlvid.h
  997. Inputs:     srow    - starting row upper left corner
  998.             scol    - starting column upper left corner
  999.             erow    - ending row lower right corner
  1000.             ecol    - ending column lower right corner
  1001. Return:     none
  1002. Also see:   clreol_ clrscrn
  1003. Example:
  1004.             filld(10,10,20,20,'X',LCYAN|_BLUE);
  1005.             clrwin(11,11,19,19);
  1006.  
  1007.  
  1008. Name:       cvaltype
  1009. Purpose:    checks given character against given character type code,
  1010.             determines if character is valid type
  1011. Prototype:  int cvaltype(int ch,int ctype);
  1012. Header:     tcxlstr.h
  1013. Inputs:     ch      - character to test
  1014.             ctype   - character type code to compare with, see section on TCXL
  1015.                       format strings for a list of valid character type codes.
  1016. Return:     a 1 if character is a valid character type, otherwise a zero
  1017. Also see:   winpdef
  1018.  
  1019.  
  1020.                                       17   
  1021. Example:
  1022.             int valid=NO;
  1023.             char ch='Z';
  1024.             valid=cvaltype(ch,'#');
  1025.             printf("%c is %sa valid char of type '#'\n",ch,valid?"":" not");
  1026.  
  1027.  
  1028. Name:       delay_
  1029. Purpose:    delays program execution for a specified duration
  1030. Prototype:  void delay_(unsigned duration);
  1031. Header:     tcxldef.h
  1032. Inputs:     duration    - duration (0-65535) ie. 18 = 1 second
  1033. Return:     none
  1034. Also see:   timer
  1035. Example:
  1036.             printf("Testing\n1\n");
  1037.             delay_(36);
  1038.             printf("2\n");
  1039.             delay_(36);
  1040.             printf("3\n");
  1041.  
  1042.  
  1043. Name:       disktoscrn
  1044. Purpose:    copies a previously saved screen disk file back to the screen
  1045. Prototype:  int disktoscrn(char *fname);
  1046. Header:     tcxldsk.h tcxlvid.h
  1047. Inputs:     fname   - address of the string containing file name to read from
  1048. Return:     a zero if no error
  1049. Also see:   disktowin fexist scrntodisk
  1050. Example:
  1051.             if(disktoscrn("SCREEN.DAT")) {
  1052.                 printf("Error reading input file\n");
  1053.                 exit(1);
  1054.             }
  1055.  
  1056.  
  1057. Name:       disktowin
  1058. Purpose:    copies a previously saved window disk file back to the screen
  1059. Prototype:  int disktowin(char *fname);
  1060. Header:     tcxldsk.h
  1061. Inputs:     fname   - address of the string containing file name to read from
  1062. Return:     a zero if no error
  1063. Also see:   disktoscrn fexist wintodisk
  1064. Example:
  1065.             if(disktowin("WINDOW.DAT")) {
  1066.                 printf("Error reading input file\n");
  1067.                 exit(1);
  1068.             }
  1069.  
  1070.  
  1071. Name:       emsalloc
  1072. Purpose:    allocates pages of EMS memory.  See the section on using TCXL's EMS
  1073.             functions for more information
  1074. Prototype:  unsigned emsalloc(int numpages);
  1075. Header:     tcxlems.h
  1076. Inputs:     numpages  - the number of pages (16K blocks) requested
  1077. Return:     the EMS handle or a 0 if an error occurred
  1078.  
  1079.  
  1080.                                       18   
  1081. Also see:   emsdealloc emsexist emsfree
  1082. Example:
  1083.             int handle1;
  1084.             handle1=emsalloc(2);        /*  request 2 pages (32K)   */
  1085.             if(!handle1) {
  1086.                 printf("EMS allocation error\n");
  1087.                 exit(1);
  1088.             }
  1089.  
  1090.  
  1091. Name:       emsdealloc
  1092. Purpose:    deallocate previously allocated pages of EMS memory
  1093. Prototype:  int emsdealloc(int handle);
  1094. Header:     tcxlems.h
  1095. Inputs:     handle  - the previously assigned EMS handle
  1096. Return:     a 0 if no error or else an EMS error code
  1097. Also see:   emsalloc
  1098. Example:
  1099.             if(emsdealloc(ems_handle)) {
  1100.                 printf("EMS deallocation error\n");
  1101.                 exit(1);
  1102.             }
  1103.  
  1104.  
  1105. Name:       emsexist
  1106. Purpose:    determines if the EMS device driver is loaded.  See the section on
  1107.             using TCXL's EMS functions for more information
  1108. Prototype:  int emsexist(void);
  1109. Header:     tcxlems.h
  1110. Inputs:     none
  1111. Return:     a 0 if EMS driver not loaded, or a 1 if EMS driver is loaded
  1112. Also see:   emsalloc emsfree emstotal expmem
  1113. Example:
  1114.             printf("EMS device driver is %sloaded\n",(emsexist())?"":"not ");
  1115.  
  1116.  
  1117. Name:       emsframe
  1118. Purpose:    returns the EMS page frame base address (segment)
  1119. Prototype:  unsigned emsframe(void);
  1120. Header:     tcxlems.h
  1121. Inputs:     none
  1122. Return:     the EMS page frame base address (segment) or a zero if an error
  1123.             occurred
  1124. Also see:   emsmap
  1125. Example:
  1126.             printf("EMS page frame address is at:  %X\n",emsframe());
  1127.  
  1128.  
  1129. Name:       emsfree
  1130. Purpose:    returns the number of free EMS pages (16K blocks)
  1131. Prototype:  unsigned emsfree(void);
  1132. Header:     tcxlems.h
  1133. Inputs:     none
  1134. Return:     the number of free EMS pages
  1135. Also see:   emsalloc emstotal
  1136. Example:
  1137.             printf("Free EMS pages:  %d\n",emsfree());
  1138.  
  1139.  
  1140.                                       19   
  1141.  
  1142.  
  1143. Name:       emsmap
  1144. Purpose:    maps a logical EMS page onto a physical page address, emsalloc()
  1145.             must be called prior to this function
  1146. Prototype:  int emsmap(int handle,int lpage,int ppage);
  1147. Header:     tcxlems.h
  1148. Inputs:     handle  - the EMS handle previosly assigned
  1149.             lpage   - the logical EMS page to map (0 - ?)
  1150.             ppage   - the physical DOS page to map to (0 - 3)
  1151. Return:     a zero if no error, or else an EMS error code
  1152. Also see:   emsalloc emsframe
  1153. Example:
  1154.             if(emsmap(ems_handle,0,0)) {
  1155.                 printf("Error mapping logical page 0 to physical page 0\n");
  1156.                 exit(1);
  1157.             }
  1158.  
  1159.  
  1160. Name:       emsread
  1161. Purpose:    reads bytes from an EMS page(s), emsalloc() and emsmap() must be
  1162.             called prior to this function.  The source segment used will be
  1163.             the current EMS page frame address and the destination segment will
  1164.             be the program's DATA segment.
  1165. Prototype:  int emsread(void *dest,unsigned emsofs,unsigned numbytes);
  1166. Header:     tcxlems.h
  1167. Inputs:     dest     - address to receive bytes read
  1168.             emsofs   - offset from the EMS page frame base address at which to
  1169.                        read the bytes from
  1170.             numbytes - the number of bytes to read
  1171. Return:     a zero if no error, otherwise an error
  1172. Also see:   emsmap emswrite
  1173. Example:
  1174.             if(!emsread(buf,0x100,64)) {
  1175.                 printf("Failed to read 64 bytes from EMS memory\n");
  1176.                 exit(1);
  1177.             }
  1178.  
  1179.  
  1180. Name:       emstotal
  1181. Purpose:    returns the total number of EMS pages (16K blocks) on the system
  1182. Prototype:  unsigned emstotal(void);
  1183. Header:     tcxlems.h
  1184. Inputs:     none
  1185. Return:     the total number of EMS pages on the system or a zero if an error
  1186.             occurred
  1187. Also see:   emsfree expmem
  1188. Example:
  1189.             printf("You have %d pages of EMS memory\n",emstotal());
  1190.  
  1191.  
  1192. Name:       emsver
  1193. Purpose:    returns the current EMS version
  1194. Prototype:  char *emsver(void);
  1195. Header:     tcxlems.h
  1196. Inputs:     none
  1197. Return:     the address of the static string containing the EMS version number
  1198.  
  1199.  
  1200.                                       20   
  1201.             or NULL if error
  1202. Example:
  1203.             printf("Your EMS version is %s\n",emsver());
  1204.  
  1205.  
  1206. Name:       emswrite
  1207. Purpose:    writes bytes to an EMS page(s), emsalloc() and emsmap() must be
  1208.             called prior to this function.  The source segment will be the
  1209.             program's DATA segment and the destination segment will be the
  1210.             EMS current EMS page frame address.
  1211. Prototype:  int emswrite(void *src,unsigned emsofs,unsigned numbytes);
  1212. Header:     tcxlems.h
  1213. Inputs:     src      - address of where to write bytes from
  1214.             emsofs   - offset from EMS page frame base address of where to write
  1215.                        bytes to
  1216.             numbytes - number of bytes to write
  1217. Return:     a zero if no error, otherwise an error
  1218. Also see:   emsframe emsmap emsread
  1219. Example:
  1220.             if(!emswrite(buf,0x100,64)) {
  1221.                 printf("Failed to write 64 bytes to EMS memory\n");
  1222.                 exit(1);
  1223.             }
  1224.  
  1225.  
  1226. Name:       expmem
  1227. Purpose:    determines the amount (if any) of expanded memory on the system
  1228. Prototype:  unsigned expmem(void);
  1229. Header:     tcxldef.h tcxlems.h
  1230. Inputs:     none
  1231. Return:     the amount of expanded memory in Kilobytes
  1232. Also see:   emsexist extmem
  1233. Example:
  1234.             printf("Amt of expanded memory = %dK\n",expmem());
  1235.  
  1236.  
  1237. Name:       extmem
  1238. Purpose:    determines the amount of extended memory on an AT machine
  1239. Prototype:  unsigned extmem(void);
  1240. Header:     tcxldef.h
  1241. Inputs:     none
  1242. Return:     the amount of extended memory in Kilobytes
  1243. Also see:   expmem
  1244. Example:
  1245.             printf("Amt of extended memory = %dK\n",extmem());
  1246.  
  1247.  
  1248. Name:       fcmpdatm
  1249. Purpose:    compares the dates and times of 2 files
  1250. Prototype:  int fcmpdatm(char *fname1,char *fname2);
  1251. Header:     tcxldsk.h
  1252. Inputs:     fname1  - address of string containing filename1
  1253.             fname2  - address of string containing filename2
  1254. Return:     -1 if less than or equal to, 0 if error, 1 if greater than
  1255. Also see:   fexist
  1256. Example:
  1257.             int i;
  1258.  
  1259.  
  1260.                                       21   
  1261.             i=fcmpdatm("C:FILE1.EXT","A:FILE1.EXT");
  1262.             if(i>0) printf("Backup copy of file needs refreshing\n");
  1263.  
  1264.  
  1265. Name:       fexist
  1266. Purpose:    determines if a disk file exists
  1267. Prototype:  int fexist(char *fname);
  1268. Header:     tcxldsk.h
  1269. Inputs:     fname   - the address of string containing file name to check,
  1270.                       wildcards are allowed in the file name
  1271. Return:     a 0 if file doesn't exist, a 1 if it does
  1272. Also see:   fcmpdatm
  1273. Example:
  1274.             int i;
  1275.             i=fexist("\\COMMAND.COM");
  1276.             printf("\\COMMAND.COM does %sexist\n",i?"":"not ");
  1277.  
  1278.  
  1279. Name:       fhide
  1280. Purpose:    hides a disk file
  1281. Prototype:  int fhide(char *filename);
  1282. Header:     tcxldsk.h
  1283. Inputs:     filename    - address of string containing file name
  1284. Return:     a zero if an error occurred
  1285. Example:
  1286.             if(!fhide("MYFILE.EXT")) {
  1287.                 printf("Could not hide file\n");
  1288.                 exit(1);
  1289.             }
  1290.  
  1291.  
  1292. Name:       fill
  1293. Purpose:    fills in a region of the screen with specified character/attribute
  1294. Prototype:  void fill(int srow,int scol,int erow,int ecol,int ch,int atr);
  1295. Header:     tcxlvid.h
  1296. Inputs:     srow    - starting row upper left corner
  1297.             scol    - starting column upper left corner
  1298.             erow    - ending row lower left corner
  1299.             ecol    - ending column lower left corner
  1300.             ch      - character to fill with
  1301.             atr     - attribute of character
  1302. Return:     none
  1303. Also see:   attrib filld
  1304. Example:
  1305.             box(1,1,10,10,3,LMAGENTA|_CYAN);
  1306.             fill(2,2,9,9,' ',WHITE|_RED);
  1307.  
  1308.  
  1309. Name:       filld
  1310. Purpose:    fills in a region of the screen with specified character/attribute
  1311.             by writing directly to the screen (no BIOS calls)
  1312. Prototype:  void filld(int srow,int scol,int erow,int ecol,int ch,int atr);
  1313. Header:     tcxlvid.h
  1314. Inputs:     srow    - starting row upper left corner
  1315.             scol    - starting column upper left corner
  1316.             erow    - ending row lower left corner
  1317.             ecol    - ending column lower left corner
  1318.  
  1319.  
  1320.                                       22   
  1321.             ch      - character to fill with
  1322.             atr     - attribute of character
  1323. Return:     none
  1324. Also see:   attrib fill videoinit
  1325. Example:
  1326.             boxd(1,1,10,10,3,LMAGENTA|_CYAN);
  1327.             filld(2,2,9,9,' ',WHITE|_RED);
  1328.  
  1329.  
  1330. Name:       gameport
  1331. Purpose:    determines if a game port is installed
  1332. Prototype:  int gameport(int equip);
  1333. Header:     tcxldef.h
  1334. Inputs:     equip   - the result from the biosequip() function
  1335. Return:     a 1 if a game port is installed
  1336. Also see:   mathchip numflop numpar numser
  1337. Example:
  1338.             int i;
  1339.             i=biosequip();
  1340.             printf("Game port is %sinstalled\n",gameport(i)?"":"not ");
  1341.  
  1342.  
  1343. Name:       getchf
  1344. Purpose:    gets a character from the keyboard from a list of valid
  1345.             characters, provides Escape checking
  1346. Prototype:  int getchf(char *valid);
  1347. Header:     tcxlkey.h
  1348. Inputs:     valid   - address of list of valid characters
  1349. Return:     the character pressed or 0 if the Escape key was pressed
  1350. Also see:   getxch waitkey
  1351. Example:
  1352.             char ch;
  1353.             printf("Are you sure?  ");
  1354.             ch=getchf("YyNn");
  1355.             if(ch!='Y'&&ch!='y') {
  1356.                 exit(0);
  1357.             }
  1358.  
  1359.  
  1360. Name:       getktot
  1361. Purpose:    gets the total disk space in kilobytes
  1362. Prototype:  unsigned getktot(int drive);
  1363. Header:     tcxldsk.h
  1364. Inputs:     drive   - the drive to check (3 = C:, 4 = D:, etc.)
  1365. Return:     size of the specified disk in kilobytes, -1 if error
  1366. Also see:   getvol
  1367. Example:
  1368.             printf("drive C: contains %u kilobytes\n",getktot(3));
  1369.  
  1370.  
  1371. Name:       getns
  1372. Purpose:    inputs a string of specified length from the keyboard, provides
  1373.             Escape checking
  1374. Prototype:  int getns(char *str,int max);
  1375. Header:     tcxlkey.h
  1376. Inputs:     str     - address of allocated space to receive input string
  1377.             max     - maximum length of the input string
  1378.  
  1379.  
  1380.                                       23   
  1381. Return:     a 1 if the <Esc> key was pressed
  1382. Also see:   inputsf prompts
  1383. Example:
  1384.             char age[2];
  1385.             printf("Enter your age:  ");
  1386.             if(getns(age,2)) {
  1387.                 printf("Escape was pressed\n");
  1388.                 exit(0);
  1389.             }
  1390.             printf("Your age is:  %s\n",age);
  1391.  
  1392.  
  1393. Name:       getvol
  1394. Purpose:    gets the volume label from a disk drive
  1395. Prototype:  char *getvol(char drive);
  1396. Header:     tcxldsk.h
  1397. Inputs:     drive   - drive letter
  1398. Return:     address of a static string containing the volume label or a zero if
  1399.             the disk has no volume label
  1400. Also see:   getktot
  1401. Example:
  1402.             printf("The volume label on drive C is:  %s\n",getvol('C'));
  1403.  
  1404.  
  1405. Name:       getxch
  1406. Purpose:    gets a key (ASCII code/extended ASCII code) from the keyboard
  1407. Prototype:  void getxch(int *ch,int *xch);
  1408. Header:     tcxlkey.h
  1409. Inputs:     ch      - the address of where to store input key's ASCII code
  1410.             xch     - the address of where to store input key's extended ASCII
  1411.                       code
  1412. Return:     none
  1413. Also see:   getchf
  1414. Example:
  1415.             int ch,xch;
  1416.             printf("Press a key:  ");
  1417.             getxch(&ch,&xch);
  1418.             printf("\nch = %c, ASCII code = %d, extended  = %d\n",ch,ch,xch);
  1419.  
  1420.  
  1421. Name:       gotoxy_
  1422. Purpose:    sets cursor coordinates on the screen
  1423. Prototype:  void gotoxy_(int row,int col);
  1424. Header:     tcxlvid.h
  1425. Inputs:     row     - cursor row (Y coordinate)
  1426.             col     - cursor column (X coordinate)
  1427. Return:     none
  1428. Also see:   readcur
  1429. Example:
  1430.             gotoxy_(20,30);
  1431.             printf("We are at row 20, column 30\n");
  1432.  
  1433.  
  1434. Name:       home
  1435. Purpose:    homes the cursor
  1436. Prototype:  void home(void);
  1437. Header:     tcxlvid.h
  1438.  
  1439.  
  1440.                                       24   
  1441. Inputs:     none
  1442. Return:     none
  1443. Also see:   clrscrn gotoxy_
  1444. Example:
  1445.             home();
  1446.             printf("We are at row 0, column 0\n");
  1447.  
  1448.  
  1449. Name:       inputsf
  1450. Purpose:    inputs a formatted string from the keyboard
  1451. Prototype:  int inputsf(char *str,char *fmt);
  1452. Header:     tcxlkey.h
  1453. Inputs:     str     - address of the allocated space to receive string
  1454.             fmt     - address of the format string, see section on using format
  1455.                       strings
  1456. Return:     a 0 if no error, a 1 if Escape, a 2 if invalid format string
  1457. Also see:   getns prompts
  1458. Example:
  1459.             char str[255];
  1460.             inputsf(str,!RE!'Enter phone number:  ('###') '###'-'####");
  1461.             printf("\nYour phone number is:  %s\n",str);
  1462.             inputsf(str,!EM!'Enter your name:  'AAAAAAAAAAAAAAAA");
  1463.             printf("\nYour name is:  %s\n",str);
  1464.  
  1465.  
  1466. Name:       kbstat
  1467. Purpose:    returns the status of the keyboard control keys
  1468. Prototype:  int kbstat(void);
  1469. Header:     tcxlkey.h
  1470. Inputs:     none
  1471. Return:     status word of the keyboard flag
  1472. Also see:   capsoff capson numoff numon
  1473. Example:
  1474.             if(kbstat()&CTRL) printf("The <Ctrl> key is now being pressed\n");
  1475.  
  1476.  
  1477. Name:       lcrlf
  1478. Purpose:    prints a carriage return and line feed on the printer
  1479. Prototype:  void lcrlf(void);
  1480. Header:     tcxlprn.h
  1481. Inputs:     none
  1482. Return:     none
  1483. Also see:   lprintc
  1484. Example:
  1485.             lprints("Hello, world");
  1486.             lcrlf();
  1487.             lprintc(FF);
  1488.  
  1489.  
  1490. Name:       lprintc
  1491. Purpose:    prints a character on the printer
  1492. Prototype:  void lprintc(int ch);
  1493. Header:     tcxlprn.h
  1494. Inputs:     ch  - the character to print
  1495. Return:     none
  1496. Also see:   lcrlf lprintf
  1497. Example:
  1498.  
  1499.  
  1500.                                       25   
  1501.             lprints("Hello, world\n");
  1502.             lprintc(FF);
  1503.  
  1504.  
  1505. Name:       lprintf
  1506. Purpose:    sends formatted output to the printer, works like printf()
  1507. Prototype:  int lprintf(const char *format,...);
  1508. Header:     tcxlprn.h
  1509. Inputs:     format  - format string, refer to Turbo C manual under printf()
  1510.             ...     - any additional arguments
  1511. Return:     a zero if no error, otherwise a memory allocation error
  1512. Also see:   lprintc lprintns lprints
  1513. Example:
  1514.             char ch='X';
  1515.             int i=327;
  1516.             char *str="Hello";
  1517.             lprintf("%s %c %d\n",str,ch,i);
  1518.  
  1519.  
  1520. Name:       lprintns
  1521. Purpose:    prints a string on the printer, formatting width
  1522. Prototype:  void lprintns(char *str,int width);
  1523. Header:     tcxlprn.h
  1524. Inputs:     str     - the address of the string to print
  1525.             width   - width to print string, uses padding or truncating
  1526. Return:     none
  1527. Also see:   lprintf lprints lprintsu
  1528. Example:
  1529.             lprintns("Hello, world",5);
  1530.             lcrlf();
  1531.             lprintc(FF);
  1532.  
  1533.  
  1534. Name:       lprints
  1535. Purpose:    prints a string on the printer
  1536. Prototype:  void lprints(char *str);
  1537. Header:     tcxlprn.h
  1538. Inputs:     str     - the address of the string to print
  1539. Return:     none
  1540. Also see:   lprintf lprintns lprintsu
  1541. Example:
  1542.             lprints("Hello, world\n");
  1543.             lprintc(FF);
  1544.  
  1545.  
  1546. Name:       lprintsu
  1547. Purpose:    prints an underlined string on the printer
  1548. Prototype:  void lprintsu(char *str);
  1549. Header:     tcxlprn.h
  1550. Inputs:     str     - the address of the string to print
  1551. Return:     none
  1552. Also see:   lprints
  1553. Example:
  1554.             lprintsu("Hello, world\n");
  1555.             lprintc(FF);
  1556.  
  1557.  
  1558.  
  1559.  
  1560.                                       26   
  1561. Name:       machid
  1562. Purpose:    returns the value of the machine ROM ID byte
  1563. Prototype:  int machid(void);
  1564. Header:     tcxldef.h
  1565. Inputs:     none
  1566. Return:     the value of the machine ROM ID byte
  1567. Also see:   biosver
  1568. Example:
  1569.             if(machid()==IBMPCAT) printf("You have an IBM PC/AT\n");
  1570.  
  1571.  
  1572. Name:       mathchip
  1573. Purpose:    determines if a math coprocessor is installed
  1574. Prototype:  int mathchip(int equip);
  1575. Header:     tcxldef.h
  1576. Inputs:     equip   - the result from the biosequip() function
  1577. Return:     a 1 if a math coprocessor is installed
  1578. Also see:   gameport numflop numpar numser
  1579. Example:
  1580.             int i;
  1581.             i=biosequip();
  1582.             printf("Math coprocessor is %sinstalled\n",mathchip(i)?"":"not ");
  1583.  
  1584.  
  1585. Name:       mode
  1586. Purpose:    sets the video mode
  1587. Prototype:  void mode(int mode_code);
  1588. Header:     tcxlvid.h
  1589. Inputs:     mode_code   - mode code number
  1590. Return:     none
  1591. Also see:   setlines vidtype
  1592. Example:
  1593.             mode(4);
  1594.             printf("We are now in CGA graphics mode\n");
  1595.  
  1596.  
  1597. Name:       msbpress
  1598. Purpose:    gets info about specific button presses of mouse
  1599. Prototype:  void msbpress(int button,int *bstat,int *bcount,int *x,int *y);
  1600. Header:     tcxlmou.h
  1601. Inputs:     button  - button to check, 0 = left button, 1 = right button
  1602.             bstat   - address to receive button status (0 = not being pressed,
  1603.                       1 = currently being pressed)
  1604.             bcount  - address to receive number of times pressed since last
  1605.                       call
  1606.             x       - address to receive X pixel coordinate at time of press
  1607.             y       - address to receive Y pixel coordinate at time of press
  1608. Return:     none
  1609. Also see:   msbreles msstatus
  1610. Example:
  1611.             int bstat,int bcount,int x,int y;
  1612.             msbpres(0,&bstat,&bcount,&x,&y);
  1613.             printf("bstat = %d, bcount = %d, x = %d, y = %d\n",bstat,bcount,
  1614.                 x,y);
  1615.  
  1616.  
  1617. Name:       msbreles
  1618.  
  1619.  
  1620.                                       27   
  1621. Purpose:    gets info about specific button releases of mouse
  1622. Prototype:  void msbreles(int button,int *bstat,int *bcount,int *x,int *y);
  1623. Header:     tcxlmou.h
  1624. Inputs:     button  - button to check, 0 = left button, 1 = right button
  1625.             bstat   - address to receive button status (0 = not being pressed,
  1626.                       1 = currently being pressed)
  1627.             bcount  - address to receive number of times released since last
  1628.                       call
  1629.             x       - address to receive X pixel coordinate at time of release
  1630.             y       - address to receive Y pixel coordinate at time of release
  1631. Return:     none
  1632. Also see:   msbpress msstatus
  1633. Example:
  1634.             int bstat,int bcount,int x,int y;
  1635.             msbreles(0,&bstat,&bcount,&x,&y);
  1636.             printf("bstat = %d, bcount = %d, x = %d, y = %d\n",bstat,bcount,
  1637.                 x,y);
  1638.  
  1639.  
  1640. Name:       mscursor
  1641. Purpose:    sets the mouse cursor mode
  1642. Prototype:  void mscursor(int curtype,int smask,int cmask);
  1643. Header:     tcxlmou.h
  1644. Inputs:     curtype     - cursor type, 0 = software, 1 = hardware
  1645.             smask       - screen mask (SW) or start scan line (HW), see section
  1646.                           on using mouse functions for a description of mask
  1647.             cmask       - cursor mask (SW) or stop scan line (HW), see section
  1648.                           on using mouse functions for a description of mask
  1649. Return:     none
  1650. Also see:   msshowcur
  1651.  
  1652.  
  1653. Name:       msgotoxy
  1654. Purpose:    sets the mouse coordinates
  1655. Prototype:  void msgotoxy(int x,int y);
  1656. Header:     tcxlmou.h
  1657. Inputs:     x   -   X pixel coordinate
  1658.             y   -   Y pixel coordinate
  1659. Return:     none
  1660. Also see:   msstatus
  1661. Example:
  1662.             msgotoxy(20*8,10*8);  /* sets mouse cursor at row 10, column 20 */
  1663.  
  1664.  
  1665. Name:       mshbounds
  1666. Purpose:    sets the mouse horizontal bounds
  1667. Prototype:  void mshbounds(int left,int right);
  1668. Header:     tcxlmou.h
  1669. Inputs:     left    - left pixel boundry
  1670.             right   - right pixel boundry
  1671. Return:     none
  1672. Also see:   msvbounds
  1673. Example:
  1674.                          /* limits mouse movement between columns 40 and 60 */
  1675.             mshbounds(40*8,60*8);
  1676.  
  1677.  
  1678.  
  1679.  
  1680.                                       28   
  1681. Name:       mshidecur
  1682. Purpose:    hides the mouse cursor
  1683. Prototype:  void mshidecur(void);
  1684. Header:     tcxlmou.h
  1685. Inputs:     none
  1686. Return:     none
  1687. Also see:   msshowcur
  1688. Example:
  1689.             msshowcur();        /*  now you see mouse cursor  */
  1690.             mshidecur();        /*  now you don't             */
  1691.  
  1692.  
  1693. Name:       msinit
  1694. Purpose:    determines if mouse is present.  If so, initializes mouse.  See
  1695.             section on how to use TCXL's mouse functions for details.
  1696. Prototype:  int msinit(void);
  1697. Header:     tcxlmou.h
  1698. Inputs:     none
  1699. Return:     a 0 if mouse is not present
  1700. Example:
  1701.             if(msinit()) {
  1702.                 printf("Mouse initialized!\n");
  1703.             }
  1704.             else {
  1705.                 printf("Mouse does not exist\n");
  1706.             }
  1707.  
  1708.  
  1709. Name:       msmotion
  1710. Purpose:    gets information about the movement of mouse
  1711. Prototype:  void msmotion(int *xcount,int *ycount);
  1712. Header:     tcxlmou.h
  1713. Inputs:     xcount   - address to receive amount of X movement in pixels -/+
  1714.             ycount   - address to receive amount of Y movement in pixels -/+
  1715. Return:     none
  1716. Example:
  1717.             int xcount,ycount;
  1718.             msinit();
  1719.             msmotion(&xcount,&ycount);
  1720.             printf("Move mouse, then press a key\n");
  1721.             waitkey();
  1722.             msmotion(&xcount,&ycount);
  1723.             if(xcount<0) printf("mouse moved left\n");
  1724.             if(xcount>0) printf("mouse moved right\n");
  1725.             if(ycount<0) printf("mouse moved up\n");
  1726.             if(ycount>0) printf("mouse moved down\n");
  1727.  
  1728.  
  1729. Name:       msshowcur
  1730. Purpose:    reveals the mouse cursor
  1731. Prototype:  void msshowcur(void);
  1732. Header:     tcxlmou.h
  1733. Inputs:     none
  1734. Return:     none
  1735. Also see:   mshidecur
  1736. Example:
  1737.             msshowcur();        /*  now you see mouse cursor  */
  1738.  
  1739.  
  1740.                                       29   
  1741.             mshidecur();        /*  now you don't             */
  1742.  
  1743.  
  1744. Name:       msspeed
  1745. Purpose:    adjusts mouse speed by changing its sensitivity
  1746. Prototype:  void msspeed(int xratio,int yratio);
  1747. Header:     tcxlmou.h
  1748. Inputs:     xratio      - horizontal speed (higher numbers are slower)
  1749.             yratio      - vertical speed (higher numbers are slower)
  1750. Return:     none
  1751. Example:
  1752.             msinit();
  1753.             msshowcur();
  1754.             printf("move mouse around, then press a key\n");
  1755.             waitkey();
  1756.             msspeed(15,15);
  1757.             printf("now see how mouse moves\n");
  1758.             waitkey();
  1759.  
  1760.  
  1761. Name:       msstatus
  1762. Purpose:    returns the mouse status
  1763. Prototype:  void msstatus(int *bstat,int *x,int *y);
  1764. Header:     tcxlmou.h
  1765. Inputs:     bstat   - address to receive button status (0 = not pressed, 1 =
  1766.                       pressed)
  1767.             x       - address to receive current X pixel coordinate
  1768.             y       - address to receive current Y pixel coordinate
  1769. Return:     none
  1770. Example:
  1771.             int bstat,x,y;
  1772.             msstatus(&bstat,&x,&y);
  1773.             printf("bstat = %d, x = %d, y = %d\n",bstat,x,y);
  1774.  
  1775.  
  1776. Name:       msvbounds
  1777. Purpose:    sets the mouse vertical bounds
  1778. Header:     tcxlmou.h
  1779. Prototype:  void msvbounds(int top,int bottom);
  1780. Inputs:     top     - top pixel boundry
  1781.             bottom  - bottom pixel boundry
  1782. Return:     none
  1783. Also see:   mshbounds
  1784. Example:
  1785.                         /*  limits mouse movement between rows 10 and 20  */
  1786.             msvbounds(10*8,20*8);
  1787.  
  1788.  
  1789. Name:       numflop
  1790. Purpose:    returns the number of floppy disk drives installed
  1791. Prototype:  int numflop(int equip);
  1792. Header:     tcxlmou.h
  1793. Header:     tcxldef.h
  1794. Inputs:     equip   - the result from the biosequip() function
  1795. Return:     the number of floppy disk drives installed
  1796. Also see:   gameport mathchip numpar numser
  1797. Example:
  1798.  
  1799.  
  1800.                                       30   
  1801.             int i;
  1802.             i=biosequip();
  1803.             printf("Number of floppy disk drives = %d\n",numflop(i));
  1804.  
  1805.  
  1806. Name:       numoff
  1807. Purpose:    toggles the NumLock key off
  1808. Prototype:  void numoff(void);
  1809. Header:     tcxlkey.h
  1810. Inputs:     none
  1811. Return:     none
  1812. Also see:   capsoff kbstat numon
  1813. Example:
  1814.             numoff();
  1815.  
  1816.  
  1817. Name:       numon
  1818. Purpose:    toggles the NumLock key on
  1819. Prototype:  void numon(void);
  1820. Header:     tcxlkey.h
  1821. Inputs:     none
  1822. Return:     none
  1823. Also see:   capson kbstat numoff
  1824. Example:
  1825.             numon();
  1826.  
  1827.  
  1828. Name:       numpar
  1829. Purpose:    determines the number of parallel ports
  1830. Prototype:  int numpar(int equip);
  1831. Header:     tcxldef.h
  1832. Inputs:     equip   - the result from the biosequip() function
  1833. Return:     the number of parallel ports installed
  1834. Also see:   gameport mathchip numflop numser
  1835. Example:
  1836.             int i;
  1837.             i=biosequip();
  1838.             printf("Number of parallel ports = %d\n",numpar(i));
  1839.  
  1840.  
  1841. Name:       numser
  1842. Purpose:    determines the number of serial ports installed
  1843. Prototype:  int numser(int equip);
  1844. Header:     tcxldef.h
  1845. Inputs:     equip   - the result from the biosequip() function
  1846. Return:     the number of serial ports installed
  1847. Also see:   gameport mathchip numflop numpar
  1848. Example:
  1849.             int i;
  1850.             i=biosequip();
  1851.             printf("Number of serial ports = %d\n",numser(i));
  1852.  
  1853.  
  1854. Name:       printc
  1855. Purpose:    prints a character to the screen at a specified location and
  1856.             attribute
  1857. Prototype:  void printc(int row,int col,int attr,int ch,int count);
  1858.  
  1859.  
  1860.                                       31   
  1861. Header:     tcxlvid.h
  1862. Inputs:     row     - row
  1863.             col     - column
  1864.             attr    - attribute of character
  1865.             ch      - character to print
  1866.             count   - number of times to print character
  1867. Return:     none
  1868. Also see:   attrib printcd
  1869. Example:
  1870.             printc(18,60,LGREEN|BLINK,'Z',5);
  1871.  
  1872.  
  1873. Name:       printcd
  1874. Purpose:    prints a character directly to the screen at a specified
  1875.             location and attribute (no BIOS calls)
  1876. Prototype:  void printcd(int row,int col,int attr,int ch);
  1877. Header:     tcxlvid.h
  1878. Inputs:     row     - row
  1879.             col     - column
  1880.             attr    - attribute of character
  1881.             ch      - character to print
  1882. Return:     none
  1883. Also see:   attrib printc videoinit
  1884. Example:
  1885.             printcd(18,60,LGREEN|BLINK,'Z');
  1886.  
  1887.  
  1888. Name:       prints
  1889. Purpose:    displays a string on the screen at a specified location
  1890.             and attribute
  1891. Prototype:  void prints(int row,int col,int attr,char *str);
  1892. Header:     tcxlvid.h
  1893. Inputs:     row     - cursor row
  1894.             col     - cursor column
  1895.             attr    - character attribute
  1896.             str     - address of string to display
  1897. Return:     none
  1898. Also see:   attrib printsd
  1899. Example:
  1900.             prints(20,10,LRED|_LGREY,"Hello, world");
  1901.  
  1902.  
  1903. Name:       printsd
  1904. Purpose:    displays a string at a specified location in a specified
  1905.             attribute directly on the screen (no BIOS calls)
  1906. Prototype:  void printsd(int row,int col,int attr,char *str);
  1907. Header:     tcxlvid.h
  1908. Inputs:     row     - cursor row
  1909.             col     - cursor column
  1910.             attr    - character attribute
  1911.             str     - address of string to display
  1912. Return:     none
  1913. Also see:   attrib prints videoinit
  1914. Example:
  1915.             printsd(20,10,LRED|_LGREY,"Hello, world");
  1916.  
  1917.  
  1918.  
  1919.  
  1920.                                       32   
  1921. Name:       prompts
  1922. Purpose:    prompts for a string and accepts keyboard input
  1923. Prototype:  void prompts(char *prompt,char *str);
  1924. Header:     tcxlkey.h
  1925. Inputs:     prompt  - address of string containing prompt
  1926.             str     - address of where to place input string
  1927. Return:     none
  1928. Also see:   getns inputsf
  1929. Example:
  1930.             char name[30];
  1931.             prompts("Enter your name:  ",name);
  1932.  
  1933.  
  1934. Name:       readchat
  1935. Purpose:    reads the character and attribute under the cursor
  1936. Prototype:  int readchat(void);
  1937. Header:     tcxlvid.h
  1938. Inputs:     none
  1939. Return:     integer containing character in low byte and attribute in high byte
  1940. Also see:   revattr setattr
  1941. Example:
  1942.             int i;
  1943.             prints(0,0,LGREEN|_BLUE,"Hello, world");
  1944.             gotoxy_(0,7);
  1945.             i=readchat();
  1946.             gotoxy_(1,0);
  1947.             printf("character is %c and attribute is %d\n",i,(i>>8));
  1948.  
  1949.  
  1950. Name:       readcur
  1951. Purpose:    reads the current cursor location
  1952. Prototype:  void readcur(int *row,int *col);
  1953. Header:     tcxlvid.h
  1954. Inputs:     row     - address of location to receive cursor row
  1955.             col     - address of location to receive cursor column
  1956. Return:     none
  1957. Also see:   gotoxy_
  1958. Example:
  1959.             int row,col;
  1960.             readcur(&row,&col);
  1961.             prints(0,0,LCYAN|BLINK,"Hello, world");
  1962.             prints(row,col,LWHITE,"Hello,world");
  1963.  
  1964.  
  1965. Name:       revattr
  1966. Purpose:    reverses the attribute of the character under the current cursor
  1967.             location
  1968. Prototype:  void revattr(int count);
  1969. Header:     tcxlvid.h
  1970. Inputs:     count   - the number of characters to reverse attribute of
  1971. Return:     none
  1972. Also see:   readchat setattr
  1973. Example:
  1974.             prints(0,0,LCYAN|_BLUE,"Hello, world");
  1975.             gotoxy_(0,0);
  1976.             revattr(5);
  1977.  
  1978.  
  1979.  
  1980.                                       33   
  1981.  
  1982. Name:       scrndump
  1983. Purpose:    dumps the current screen to the printer
  1984. Prototype:  void scrndump(void);
  1985. Header:     tcxlprn.h
  1986. Inputs:     none
  1987. Return:     none
  1988. Also see:   scrntodisk ssave videoinit
  1989. Example:
  1990.             printf("Turn printer on and press a key to continue....");
  1991.             waitkey();
  1992.             scrndump();
  1993.  
  1994.  
  1995. Name:       scrntodisk
  1996. Purpose:    copies the current screen to a disk file
  1997. Prototype:  int scrntodisk(char *fname);
  1998. Header:     tcxldsk.h  tcxlvid.h
  1999. Inputs:     fname   - address of the string containing file to write to
  2000. Return:     a zero if no error
  2001. Also see:   disktoscrn scrndump ssave wintodisk
  2002. Example:
  2003.             if(scrntodisk("SCREEN.DAT")) {
  2004.                 printf("Error creating file\n");
  2005.                 exit(1);
  2006.             }
  2007.  
  2008.  
  2009. Name:       setattr
  2010. Purpose:    sets the attribute of the character under the current cursor
  2011.             location
  2012. Prototype:  void setattr(int attr,int count);
  2013. Header:     tcxlvid.h
  2014. Inputs:     attr    - attribute to set character
  2015.             count   - the number of characters to set the attribute of
  2016. Return:     none
  2017. Also see:   attrib readchat revattr
  2018. Example:
  2019.             prints(0,0,LCYAN|_BLUE,"Hello, world");
  2020.             gotoxy_(0,0);
  2021.             setattr(LRED|BLINK,5);
  2022.  
  2023.  
  2024. Name:       setcursz
  2025. Purpose:    sets the cursor size
  2026. Prototype:  void setcursz(int sline,int eline);
  2027. Header:     tcxlvid.h
  2028. Inputs:     sline   - start line of cursor (32 for no cursor)
  2029.             eline   - end line of cursor
  2030. Return:     none
  2031. Example:
  2032.             setcursz(1,7);
  2033.             printf("The cursor is now large\n");
  2034.  
  2035.  
  2036. Name:       setlines
  2037. Purpose:    sets the number of lines on the display
  2038.  
  2039.  
  2040.                                       34   
  2041. Prototype:  int setlines(int numlines);
  2042. Header:     tcxlvid.h
  2043. Inputs:     numlines    - the number of lines to set the display to, valid
  2044.                           numbers are 25, 43 for EGA, and 50 for VGA.
  2045. Return:     zero if no error
  2046. Also see:   mode vidtype
  2047. Example:
  2048.             if(setlines(43)) {
  2049.                 printf("You need an EGA monitor for 43-line mode\n");
  2050.             }
  2051.             else {
  2052.                 printf("You are now in EGA 43-line mode\n");
  2053.             }
  2054.  
  2055.  
  2056. Name:       sound_
  2057. Purpose:    sounds a tone of specified pitch and duration
  2058. Prototype:  void sound_(unsigned pitch,unsigned duration);
  2059. Header:     tcxldef.h
  2060. Inputs:     pitch       - pitch of tone (0-65535)
  2061.             duration    - duration of tone (0-65535) ie. 18 = 1 second
  2062. Return:     none
  2063. Also see:   beep
  2064. Example:
  2065.             sound_(255,3);
  2066.  
  2067.  
  2068. Name:       spc
  2069. Purpose:    displays a specified number of spaces to the screen
  2070. Prototype:  void spc(int num);
  2071. Header:     tcxlvid.h
  2072. Inputs:     num     - number of spaces to display
  2073. Return:     none
  2074. Example:
  2075.             prints(15,50,7,"0123456789");
  2076.             gotoxy_(15,53);
  2077.             spc(3);
  2078.  
  2079.  
  2080. Name:       srestore
  2081. Purpose:    restores a previously saved screen
  2082. Prototype:  void srestore(int *sbuf);
  2083. Header:     tcxlvid.h
  2084. Inputs:     sbuf    - address of previously saved screen buffer
  2085. Return:     none
  2086. Also see:   ssave videoinit wrestore
  2087. Example:
  2088.             int *sbuf;
  2089.             sbuf=ssave();
  2090.             clrscrn();
  2091.             srestore(sbuf);
  2092.  
  2093.  
  2094. Name:       ssave
  2095. Purpose:    saves the current screen to a buffer
  2096. Prototype:  int *ssave(void);
  2097. Header:     tcxlvid.h
  2098.  
  2099.  
  2100.                                       35   
  2101. Inputs:     none
  2102. Return:     address of newly created screen buffer or 0 if allocation error
  2103. Also see:   scrndump scrntodisk srestore videoinit wsave
  2104. Example:
  2105.             int *sbuf;
  2106.             sbuf=ssave();
  2107.             clrscrn();
  2108.             srestore(sbuf);
  2109.  
  2110.  
  2111. Name:       strbmatch
  2112. Purpose:    returns the best match of a string in an array of strings
  2113. Prototype:  char *strbmatch(char *str,char *strarr[]);
  2114. Header:     tcxlstr.h
  2115. Inputs:     str     - address of string to match
  2116.             strarr  - address of array of string pointers, the last string in
  2117.                       the array must be empty
  2118. Return:     address of the string in the array that best matched the given
  2119.             string
  2120. Also see:   strmatch
  2121. Example:
  2122.             char *strarr[4]= { "Hello","Computer","World","" };
  2123.             char *str="help";
  2124.             printf("best match is:  %s\n",strbmatch(str,strarr);
  2125.  
  2126.  
  2127. Name:       strchg
  2128. Purpose:    finds all letters in a string matching one character and
  2129.             replaces them with another
  2130. Prototype:  char *strchg(char *str,int oldch,int newch);
  2131. Header:     tcxlstr.h
  2132. Inputs:     str     - address of string to search
  2133.             oldch   - character to search for
  2134.             newch   - character to replace with
  2135. Return:     the address of the modified string or a NULL if no matches found
  2136. Also see:   strichg
  2137. Example:
  2138.             char *str="Hello there";
  2139.             printf("Before:  %s\n",str);
  2140.             strchg(str,'h','*');
  2141.             printf("After:  %s\n",str);
  2142.  
  2143.  
  2144. Name:       strcode
  2145. Purpose:    encodes/decodes a string, call this function to encode a string,
  2146.             then call again using the same key to decode, when reading or
  2147.             writing from a disk file, be sure to open the file in binary mode
  2148. Prototype:  char *strcode(char *str,int key);
  2149. Header:     tcxlstr.h
  2150. Inputs:     str  - the string to encode/decode
  2151.             key  - a key to encode the string with (1-255), to decode you must
  2152.             use the same key as when encoded
  2153. Return:     the address of the encoded/decoded string
  2154. Example:
  2155.             char *str="Hello, world";
  2156.             printf("Before:   %s\n",str);
  2157.             strcode(str,37);
  2158.  
  2159.  
  2160.                                       36   
  2161.             printf("Encoded:  %s\n",str);
  2162.             strcode(str,37);
  2163.             printf("Decoded:  %s\n",str);
  2164.  
  2165.  
  2166. Name:       strdel
  2167. Purpose:    deletes a substring from within a string
  2168. Prototype:  char *strdel(char *substr,char *str);
  2169. Header:     tcxlstr.h
  2170. Inputs:     substr  - address of substring to delete
  2171.             str     - address of string to delete from
  2172. Return:     a NULL if the substring was not found, or the address of the
  2173.             modified string
  2174. Also see:   stridel strinc strins strmid
  2175. Example:
  2176.             char *str="Hello, XXXXXworld";
  2177.             strdel("XXXXX",str);
  2178.             printf("%s\n",str);
  2179.  
  2180.  
  2181. Name:       strichg
  2182. Purpose:    finds all letters in a string matching one character and
  2183.             replaces them with another, ignoring case of letters
  2184. Prototype:  char *strichg(char *str,int oldch,int newch);
  2185. Header:     tcxlstr.h
  2186. Inputs:     str     - address of string to search
  2187.             oldch   - character to search for
  2188.             newch   - character to replace with
  2189. Return:     the address of the modified string or a NULL if no matches found
  2190. Also see:   strchg
  2191. Example:
  2192.             char *str="Hello there";
  2193.             printf("Before:  %s\n",str);
  2194.             strichg(str,'h','*');
  2195.             printf("After:  %s\n",str);
  2196.  
  2197.  
  2198. Name:       stridel
  2199. Purpose:    deletes a substring from within a string, ignoring case of letters
  2200. Prototype:  char *stridel(char *substr,char *str);
  2201. Header:     tcxlstr.h
  2202. Inputs:     substr  - address of substring to delete
  2203.             str     - address of string to delete from
  2204. Return:     a NULL if the substring was not found, or the address of the
  2205.             modified string
  2206. Also see:   strdel striinc
  2207. Example:
  2208.             char *str="Hello, XXXXXworld";
  2209.             stridel("XXXXX",str);
  2210.             printf("%s\n",str);
  2211.  
  2212.  
  2213. Name:       striinc
  2214. Purpose:    determines if one string is included in another, ignoring case of
  2215.             letters
  2216. Prototype:  char *striinc(char *str1,char *str2);
  2217. Header:     tcxlstr.h
  2218.  
  2219.  
  2220.                                       37   
  2221. Inputs:     str1    - address of string1
  2222.             str2    - address of string2
  2223. Return:     the address where string1 is included in string2, or a NULL if
  2224.             string1 is not included in string2
  2225. Also see:   strinc strmid
  2226. Example:
  2227.             char *str1="HeLlo WOrLd";
  2228.             char *str2="XXXXXXXHello, worldXXXXX";
  2229.             if(striinc(str1,str2)) printf("%s is included in %s\n",str1,str2);
  2230.  
  2231.  
  2232. Name:       strinc
  2233. Purpose:    determines if one string is included in another
  2234. Prototype:  char *strinc(char *str1,char *str2);
  2235. Header:     tcxlstr.h
  2236. Inputs:     str1    - address of string1
  2237.             str2    - address of string2
  2238. Return:     the address where string1 is included in string2, or a NULL if
  2239.             string1 is not included in string2
  2240. Also see:   striinc strmid
  2241. Example:
  2242.             char *str1="Hello world";
  2243.             char *str2="XXXXXXXHello, worldXXXXX";
  2244.             if(strinc(str1,str2)) printf("%s is included in %s\n",str1,str2);
  2245.  
  2246.  
  2247. Name:       strins
  2248. Purpose:    inserts one string into another
  2249. Prototype:  char *strins(char *instr,char **str,int st_pos);
  2250. Header:     tcxlstr.h
  2251. Inputs:     instr   - the address of the string to insert
  2252.             str     - the address of the address of the string to insert into
  2253.             st_pos  - the starting position for where to insert
  2254. Return:     the address of the newly allocated string, or a NULL if a memory
  2255.             allocation error occurred
  2256. Also see:   strdel strinc
  2257. Example:
  2258.             char *str="Hello!";
  2259.             printf("%s\n",str);
  2260.             strins(", world",&str,5);
  2261.             printf("%s\n",str);
  2262.             free(str);              /*  free memory when done with string  */
  2263.  
  2264.  
  2265. Name:       striocc
  2266. Purpose:    returns the number of occurrences of a character in a string
  2267.             ignoring the case of letters
  2268. Prototype:  int striocc(char *str,int ch);
  2269. Header:     tcxlstr.h
  2270. Inputs:     str     - address of the string to search
  2271.             ch      - the character to look for
  2272. Return:     the number of occurrences of the character in the string
  2273. Also see:   strocc
  2274. Example:
  2275.             char ch='L';
  2276.             char *str="Hello, world";
  2277.             printf("%c occurs in %s %d times\n",ch,str,striocc(str,ch));
  2278.  
  2279.  
  2280.                                       38   
  2281.  
  2282.  
  2283. Name:       strleft
  2284. Purpose:    takes a specified portion of a string from the left and creates
  2285.             a new string
  2286. Prototype:  char *strleft(char *str,int num_chars);
  2287. Header:     tcxlstr.h
  2288. Inputs:     str         - address of input string
  2289.             num_chars   - number of characters to copy
  2290. Return:     address of the newly created string or a NULL if a memory
  2291.             allocation error occurred
  2292. Also see:   strmid strright strtrim
  2293. Example:
  2294.             char *left;
  2295.             char *str="Hello, worldXXXX";
  2296.             left=strmid(str,12);
  2297.             printf("%s\n",left);
  2298.             free(left);             /*  free memory when done with string  */
  2299.  
  2300.  
  2301. Name:       strltrim
  2302. Purpose:    trims leading spaces off of a string
  2303. Prototype:  char *strtrim(char **str);
  2304. Header:     tcxlstr.h
  2305. Inputs:     str  - address of the address of the string to trim
  2306. Return:     address of the modified string
  2307. Also see:   strright strsetsz strtrim
  2308. Example:
  2309.             char *str="        Hello, world";
  2310.             printf("%s.\n",str);
  2311.             strltrim(&str);
  2312.             printf("%s.\n",str);
  2313.  
  2314.  
  2315. Name:       strmatch
  2316. Purpose:    compares 2 strings, returns a match score
  2317. Prototype:  int strmatch(char *str1,char *str2);
  2318. Header:     tcxlstr.h
  2319. Inputs:     str1    - address of first string
  2320.             str2    - address of second string
  2321. Return:     a match score, the higher the score, the better they match
  2322. Also see:   strbmatch
  2323. Example:
  2324.             char *str1="hello";
  2325.             char *str2="help";
  2326.             printf("match score = %d\n",strmatch(str1,str2);
  2327.  
  2328.  
  2329. Name:       strmid
  2330. Purpose:    takes a section from input string starting at given position
  2331.             and taking the given amount of characters creating a new string
  2332. Prototype:  char *strmid(char *str,int st_pos,int num_chars);
  2333. Header:     tcxlstr.h
  2334. Inputs:     str         - address of input string
  2335.             st_pos      - position in input string to start copying characters
  2336.                           (starting at position 0)
  2337.             num_chars   - number of characters to copy
  2338.  
  2339.  
  2340.                                       39   
  2341. Return:     address of the newly created string or a NULL if a memory
  2342.             allocation error occurred
  2343. Also see:   strleft strright
  2344. Example:
  2345.             char *middle;
  2346.             char *str="XXXXXHello, worldXXXX";
  2347.             middle=strmid(str,5,12);
  2348.             printf("%s\n",middle);
  2349.             free(middle);             /*  free memory when done with string  */
  2350.  
  2351.  
  2352. Name:       strocc
  2353. Purpose:    returns the number of occurrences of a character in a string
  2354. Prototype:  int strocc(char *str,int ch);
  2355. Header:     tcxlstr.h
  2356. Inputs:     str     - address of the string to search
  2357.             ch      - the character to look for
  2358. Return:     the number of occurrences of the character in the string
  2359. Also see:   striocc
  2360. Example:
  2361.             char ch='l';
  2362.             char *str="Hello, world";
  2363.             printf("%c occurs in %s %d times\n",ch,str,strocc(str,ch));
  2364.  
  2365.  
  2366. Name:       strright
  2367. Purpose:    takes a specifed portion from the right side of a string creating
  2368.             a new string
  2369. Prototype:  char *strright(char *str,int num_chars);
  2370. Header:     tcxlstr.h
  2371. Inputs:     str         - address of input string
  2372.             num_chars   - number of characters to copy
  2373. Return:     address of the newly created string or a NULL if a memory
  2374.             allocation error occurred
  2375. Also see:   strleft strltrim strmid
  2376. Example:
  2377.             char *right;
  2378.             char *str="XXXXXHello, world";
  2379.             right=strright(str,12);
  2380.             printf("%s\n",right);
  2381.             free(right);             /*  free memory when done with string  */
  2382.  
  2383.  
  2384. Name:       strrol
  2385. Purpose:    rotates a string specified number of characters left, characters
  2386.             wrap around
  2387. Prototype:  char *strrol(char *str,int count);
  2388. Header:     tcxlstr.h
  2389. Inputs:     str    - the address of the string to rotate
  2390.             count  - number of characters to rotate
  2391. Return:     the address of the modified string
  2392. Also see:   strror strshl
  2393. Example:
  2394.             char *str="Hello, world";
  2395.             printf("%s.\n",str);
  2396.             strrol(str,3);
  2397.             printf("%s.\n",str);
  2398.  
  2399.  
  2400.                                       40   
  2401.  
  2402.  
  2403. Name:       strror
  2404. Purpose:    rotates a string specified number of characters right, characters
  2405.             wrap around
  2406. Prototype:  char *strror(char *str,int count);
  2407. Header:     tcxlstr.h
  2408. Inputs:     str    - the address of the string to rotate
  2409.             count  - number of characters to rotate
  2410. Return:     the address of the modified string
  2411. Also see:   strrol strshr
  2412. Example:
  2413.             char *str="Hello, world";
  2414.             printf("%s.\n",str);
  2415.             strror(str,3);
  2416.             printf("%s.\n",str);
  2417.  
  2418.  
  2419. Name:       strsetsz
  2420. Purpose:    adjusts the length of a string by truncation or padding with
  2421.             spaces
  2422. Prototype:  char *strsetsz(char **str,int newsize);
  2423. Header:     tcxlstr.h
  2424. Inputs:     str     - address of pointer to the string
  2425.             newsize - the new length of the string
  2426. Return:     address of the new string or a NULL if a memory allocation error
  2427.             occurred
  2428. Also see:   strtrim
  2429. Example:
  2430.             char *str="Hello, world";
  2431.             strsetsz(&str,25);
  2432.             printf("%s.\n",str);
  2433.             strsetsz(&str,5);
  2434.             printf("%s.\n",str);
  2435.  
  2436.  
  2437. Name:       strshl
  2438. Purpose:    shifts a string specified number of characters left, characters
  2439.             'drop off' and spaces are added to the string
  2440. Prototype:  char *strshl(char *str,int count);
  2441. Header:     tcxlstr.h
  2442. Inputs:     str    - the address of the string to shift
  2443.             count  - number of characters to shift
  2444. Return:     the address of the modifed string
  2445. Also see:   strrol strshr
  2446. Example:
  2447.             char *str="Hello, world";
  2448.             printf("%s.\n",str);
  2449.             strshl(str,3);
  2450.             printf("%s.\n",str);
  2451.  
  2452.  
  2453. Name:       strshr
  2454. Purpose:    shifts a string specified number of characters right, characters
  2455.             'drop off' and spaces are added to the string
  2456. Prototype:  char *strshr(char *str,int count);
  2457. Header:     tcxlstr.h
  2458.  
  2459.  
  2460.                                       41   
  2461. Inputs:     str    - the address of the string to shift
  2462.             count  - number of characters to shift
  2463. Return:     the address of the modified string
  2464. Also see:   strror strshl
  2465. Example:
  2466.             char *str="Hello, world";
  2467.             printf("%s.\n",str);
  2468.             strshr(str,3);
  2469.             printf("%s.\n",str);
  2470.  
  2471.  
  2472. Name:       strtrim
  2473. Purpose:    trims trailing spaces off of a string
  2474. Prototype:  char *strtrim(char *str);
  2475. Header:     tcxlstr.h
  2476. Inputs:     str  - address of the string to trim
  2477. Return:     address of the modified string
  2478. Also see:   strleft strltrim strsetsz
  2479. Example:
  2480.             char *str="Hello, world          ";
  2481.             printf("%s.\n",str);
  2482.             strtrim(str);
  2483.             printf("%s.\n",str);
  2484.  
  2485.  
  2486. Name:       struplow
  2487. Purpose:    converts a string to mixed upper & lower case characters
  2488. Prototype:  char *struplow(char *str);
  2489. Header:     tcxlstr.h
  2490. Inputs:     str   - the address of the string to convert
  2491. Return:     the address of the modified string
  2492. Also see:   touplow
  2493. Example:
  2494.             char *str="heLlO, wOrLd";
  2495.             printf("%s.\n",str);
  2496.             struplow(str);
  2497.             printf("%s.\n",str);
  2498.  
  2499.  
  2500. Name:       tabstop
  2501. Purpose:    calculates a tab stop from given column and tab width
  2502. Prototype:  int tabstop(int col,int tabwidth);
  2503. Header:     tcxldef.h
  2504. Inputs:     col         - column
  2505.             tabwidth    - tab width
  2506. Return:     the next tab stop
  2507. Example:
  2508.             printf("tabstop after column 5 is %d\n",tabstop(5,8);
  2509.  
  2510.  
  2511. Name:       timer
  2512. Purpose:    returns the value of the BIOS timer
  2513. Prototype:  unsigned long timer(void);
  2514. Header:     tcxldef.h
  2515. Inputs:     none
  2516. Return:     current value of the BIOS timer
  2517. Also see:   delay_
  2518.  
  2519.  
  2520.                                       42   
  2521. Example:
  2522.             printf("%lu\n",timer());
  2523.             delay_(36);
  2524.             printf("%lu\n",timer());
  2525.  
  2526.  
  2527. Name:       touplow
  2528. Purpose:    converts a character to upper or lower case depending on previous
  2529.             character
  2530. Prototype:  int touplow(char *str,char *pos,int ch);
  2531. Header:     tcxlstr.h
  2532. Inputs:     str     - address of string
  2533.             pos     - current position in string
  2534.             ch      - character to convert
  2535. Return:     the converted character
  2536. Also see:   struplow
  2537. Example:
  2538.             char *str="Hello, world";
  2539.             printf("Before: %s\n",str);
  2540.             *(str+7)=touplow(str,str+7,*(str+7));
  2541.             printf("After:  %s\n",str);
  2542.  
  2543.  
  2544. Name:       videoinit
  2545. Purpose:    initializes TCXL's video system.  By default all TCXL functions
  2546.             performing direct screen writes go to the CGA video RAM segment at
  2547.             0xb800.  If you want these functions to work correctly with a
  2548.             monochrome video adapter or within a DESQview window, you must call
  2549.             this function.  This function sets the value of the global variable
  2550.             _videoseg
  2551. Prototype:  void videoinit(void);
  2552. Header:     tcxlvid.h  tcxlwin.h
  2553. Inputs:     none
  2554. Return:     none
  2555. Also see:   vidtype
  2556. Example:
  2557.             videoinit();
  2558.  
  2559.  
  2560. Name:       vidtype
  2561. Purpose:    determines the display adapter type
  2562. Prototype:  int vidtype(void);
  2563. Header:     tcxlvid.h
  2564. Inputs:     none
  2565. Return:     see TCXLVID.H for return values
  2566. Also see:   mode videoinit
  2567. Example:
  2568.             int i;
  2569.             i=vidtype();
  2570.             if(i<=HGCPLUS) printf("A color adapter is installed\n");
  2571.  
  2572.  
  2573. Name:       wactiv
  2574. Purpose:    activates a currently open window
  2575. Prototype:  int wactiv(int whandle);
  2576. Header:     tcxlwin.h
  2577. Inputs:     whandle     - the window handle returned from the wopen() function
  2578.  
  2579.  
  2580.                                       43   
  2581. Return:     a zero if no error, see TCXLWIN.H for error codes
  2582. Also see:   wisactiv wopen
  2583. Example:
  2584.             int w1,w2;
  2585.             w1=wopen(0,0,20,20,0,LMAGENTA|_RED);
  2586.             waitkey();
  2587.             w2=wopen(10,10,15,50,0,LGREEN|_BLUE);
  2588.             waitkey();
  2589.             wactiv(w1);
  2590.             waitkey();
  2591.             wactiv(w2);
  2592.             waitkey();
  2593.             wclose();
  2594.             wclose();
  2595.  
  2596.  
  2597. Name:       waitkey
  2598. Purpose:    halts execution until a key is pressed, the keyboard buffer is
  2599.             cleared first
  2600. Prototype:  int waitkey(void);
  2601. Header:     tcxlkey.h
  2602. Inputs:     none
  2603. Return:     the key pressed
  2604. Also see:   clearkeys getchf
  2605. Example:
  2606.             printf("Press any key to continue...");
  2607.             waitkey();
  2608.  
  2609.  
  2610. Name:       wchgattr
  2611. Purpose:    changes attribute of the active window, all text within the window
  2612.             will be changed also
  2613. Prototype:  int wchgattr(int newattr);
  2614. Header:     tcxlwin.h
  2615. Inputs:     newattr  - the attribute to make the window
  2616. Return:     a zero if no error, see TCXLWIN.H for error codes
  2617. Also see:   wactiv wtextattr
  2618. Example:
  2619.             wopen(0,0,10,10,0,LCYAN|_BLUE);
  2620.             waitkey();
  2621.             wchgattr(LMAGENTA|_RED);
  2622.             waitkey();
  2623.             wclose();
  2624.  
  2625.  
  2626. Name:       wclear
  2627. Purpose:    clears the currently active window
  2628. Prototype:  int wclear(void);
  2629. Header:     tcxlwin.h
  2630. Inputs:     none
  2631. Return:     a zero if no error, see TCXLWIN.H for error codes
  2632. Also see:   wactiv wclreol
  2633. Example:
  2634.             wopen(10,10,20,20,0,WHITE|_GREEN);
  2635.             wprints(11,11,7,"Hello");
  2636.             wclear();
  2637.             waitkey();
  2638.  
  2639.  
  2640.                                       44   
  2641.             wclose();
  2642.  
  2643.  
  2644. Name:       wclose
  2645. Purpose:    closes the currently active window
  2646. Prototype:  int wclose(void);
  2647. Header:     tcxlwin.h
  2648. Inputs:     none
  2649. Return:     a zero if no error, see TCXLWIN.H for error codes
  2650. Also see:   wactiv wcloseall wopen
  2651. Example:
  2652.             wopen(10,10,20,20,1,LCYAN|_BLUE);
  2653.             waitkey();
  2654.             wclose();
  2655.  
  2656.  
  2657. Name:       wcloseall
  2658. Purpose:    closes all open windows
  2659. Prototype:  int wcloseall(void);
  2660. Header:     tcxlwin.h
  2661. Inputs:     none
  2662. Return:     a zero if no error, see TCXLWIN.H for error codes
  2663. Also see:   wclose
  2664. Example:
  2665.             wopen(0,0,10,10,1,LCYAN|_BLUE);
  2666.             wopen(5,5,15,15,0,LMAGENTA|_RED);
  2667.             wopen(10,10,20,20,1,YELLOW|_GREEN);
  2668.             waitkey();
  2669.             wcloseall();
  2670.  
  2671.  
  2672. Name:       wclreol
  2673. Purpose:    clears to the end of the active window's line
  2674. Prototype:  int wclreol(void);
  2675. Header:     tcxlwin.h
  2676. Inputs:     none
  2677. Return:     a zero if no error, see TCXLWIN.H for error codes
  2678. Also see:   wactiv wclear
  2679. Example:
  2680.             wopen(10,10,20,40,0,LMAGENTA|_RED);
  2681.             wputs("Hello, world");
  2682.             wgotoxy(0,5);
  2683.             wclreol();
  2684.             waitkey();
  2685.             wclose();
  2686.  
  2687.  
  2688. Name:       wcopy
  2689. Purpose:    creates a new window duplicating the active window, the new window
  2690.             becomes the active window
  2691. Prototype:  int wcopy(int nsrow,int nscol);
  2692. Header:     tcxlwin.h
  2693. Inputs:     nsrow   - start row of the duplicate window
  2694.             nscol   - start column of the duplicate window
  2695. Return:     the handle of the new window or a zero if an error occurred, the
  2696.             error code will be in the global variable _werrno, see TCXLWIN.H
  2697.             for error codes
  2698.  
  2699.  
  2700.                                       45   
  2701. Also see:   wactiv wmove
  2702. Example:
  2703.             wopen(11,11,20,40,0,LMAGENTA|_RED);
  2704.             wputs("Hello, world");
  2705.             waitkey();
  2706.             wcopy(0,0);
  2707.             waitkey();
  2708.             wclose();
  2709.             wclose();
  2710.  
  2711.  
  2712. Name:       werrmsg
  2713. Purpose:    returns an error message from the last windowing function
  2714. Prototype:  char *werrmsg(void);
  2715. Header:     tcxlwin.h
  2716. Inputs:     none
  2717. Return:     the address of a static string containing an error message
  2718.             corresponding to the error code from the last performed windowing
  2719.             function
  2720. Example:
  2721.             wopen(0,0,10,10,0,LCYAN|_BLUE);
  2722.             wgotoxy(255,255);
  2723.             printf("Error msg = %s\n",werrmsg());
  2724.  
  2725.  
  2726. Name:       wgetc
  2727. Purpose:    gets a character from the keyboard within the active window, echos
  2728.             character pressed to the screen in the attribute set by the
  2729.             wtextattr() function
  2730. Prototype:  int wgetc(void);
  2731. Header:     tcxlwin.h
  2732. Inputs:     none
  2733. Return:     the ASCII value of the key pressed or a zero if an error occurred,
  2734.             the error code will be in the global variable _werrno, see
  2735.             TCXLWIN.H for error codes
  2736. Also see:   wactiv wgetchf wtextattr
  2737. Example:
  2738.             wopen(0,0,5,30,0,LCYAN|_BLUE);
  2739.             wputs("Press a key:  ");
  2740.             wputs("\nYou pressed %c",wgetc());
  2741.             waitkey();
  2742.             wclose();
  2743.  
  2744.  
  2745. Name:       wgetchf
  2746. Purpose:    gets a character from the keyboard within the active window, allows
  2747.             only characters listed in the string of valid characters.  Escape
  2748.             checking is provided by default.  This can be turned off with the
  2749.             wsetesc() function.  Selected character is echoed into the current
  2750.             window using the attribute set by the wtextattr() function.
  2751. Prototype:  int wgetchf(char *valid);
  2752. Header:     tcxlwin.h
  2753. Inputs:     valid   - address of the string containing the valid characters
  2754. Return:     the ASCII value of the key pressed or a zero if an error occurred,
  2755.             the error code will be in the global variable _werrno, see
  2756.             TCXLWIN.H for error codes
  2757. Also see:   wactiv wgetc wtextattr
  2758.  
  2759.  
  2760.                                       46   
  2761. Example:
  2762.             wopen(0,0,5,30,0,LCYAN|_BLUE);
  2763.             wputs("Are you sure? ");
  2764.             wputs("\nYou pressed %c",wgetchf("YyNn"));
  2765.             waitkey();
  2766.             wclose();
  2767.  
  2768.  
  2769. Name:       wgetns
  2770. Purpose:    gets a string from the keyboard within active window, limits the
  2771.             number of characters input to specified length.  Escape checking
  2772.             is provided by default.  This can be turned off with the wsetesc()
  2773.             function.  Entered characters will echo to the active window
  2774.             in the attribute set by the wtextattr() function.
  2775. Prototype:  int wgetns(char *str,int maxlen);
  2776. Header:     tcxlwin.h
  2777. Inputs:     str     - address of the allocated space to receive the input
  2778.                       string
  2779.             maxlen  - the maximum length of the input string
  2780. Return:     a zero if no error and escape not pressed, see TCXLWIN.H for return
  2781.             codes
  2782. Also see:   wactiv wgets winputsf wscanf wtextattr
  2783. Example:
  2784.             char firstname[5];
  2785.             wopen(0,0,5,60,1,LCYAN|_BLUE);
  2786.             wputs("Enter your first name:  ");
  2787.             wgetns(firstname,5);
  2788.             wprintf("\nYour first name is:  %s",firstname);
  2789.             waitkey();
  2790.             wclose();
  2791.  
  2792.  
  2793. Name:       wgets
  2794. Purpose:    gets a string from the keyboard within active window, echos the
  2795.             characters to the screen in the attribute set by the wtextattr()
  2796.             function
  2797. Prototype:  int wgets(char *str);
  2798. Header:     tcxlwin.h
  2799. Inputs:     str     - the address of the string to receive the input characters
  2800. Return:     a zero if no error, see TCXLWIN.H for error codes
  2801. Also see:   wactiv wgetns winputsf wscanf wtextattr
  2802. Example:
  2803.             char fname[20];
  2804.             wopen(0,0,5,60,0,LCYAN|_BLUE);
  2805.             wputs("Enter your first name:  ");
  2806.             wgets(fname);
  2807.             wputs("\nYour first name is:  %s",fname);
  2808.             waitkey();
  2809.             wclose();
  2810.  
  2811.  
  2812. Name:       wgotoxy
  2813. Purpose:    plots cursor coordinates within the currently active window
  2814. Prototype:  int wgotoxy(int wrow,int wcol);
  2815. Header:     tcxlwin.h
  2816. Inputs:     wrow    - window row (Y coordinate)
  2817.             wcol    - window column (X coordinate)
  2818.  
  2819.  
  2820.                                       47   
  2821. Return:     a zero if no error, see TCXLWIN.H for error codes
  2822. Also see:   wactiv wpgotoxy wreadcur
  2823. Example:
  2824.             wopen(0,0,10,10,0,YELLOW|_BLUE);
  2825.             wgotoxy(1,1);
  2826.             wputs("Hello");
  2827.  
  2828.  
  2829. Name:       whide
  2830. Purpose:    hides a previously saved window
  2831. Prototype:  int *whide(int **wbuf);
  2832. Header:     tcxlwin.h
  2833. Inputs:     wbuf    - address of the pointer to the window buffer to hide
  2834. Return:     the address of the hidden window's buffer or a 0 if a memory
  2835.             allocation error occurred
  2836. Also see:   wsave wunhide
  2837. Example:
  2838.             wopen(0,0,15,50,0,LCYAN|_BLUE);
  2839.             waitkey();
  2840.             whide(&_wrecord[_wcurrent].wbuf);   /* hides active window */
  2841.             waitkey();
  2842.             wunhide(&_wrecord[_wcurrent].wbuf);
  2843.             waitkey();
  2844.             wclose();
  2845.  
  2846.  
  2847. Name:       winpdef
  2848. Purpose:    defines an area of the active window for keyboard input.  See the
  2849.             section on multi-field input for details.
  2850. Prototype:  int winpdef(int wrow,int wcol,char *str,int ftype,int fattr);
  2851. Header:     tcxlwin.h
  2852. Inputs:     wrow    - start of input, window's row coordinate
  2853.             wcol    - start of input, window's column coordinate
  2854.             str     - address of string to input, must already be the length
  2855.                       the input is to be.  The string can be sized with the
  2856.                       strsetsz() function.  Contents of str will be displayed
  2857.                       before keyboard input.
  2858.             ftype   - input field type, must be a valid character type code,
  2859.                       see the section on using window input functions for a
  2860.                       list of valid character type codes.
  2861.             fattr   - field attribute
  2862. Return:     a zero if no error, see TCXLWIN.H for return codes
  2863. Also see:   winpread winputsf winpxcel wscanf
  2864. Example:
  2865.             char *str1;
  2866.             char *str2;
  2867.             wopen(0,0,10,40,0,LCYAN|_BLUE);
  2868.             wgotoxy(1,1);
  2869.             wputs("Enter name:");
  2870.             strsetsz(&str1,15);
  2871.             winpdef(1,15,str1,'M');
  2872.             wgotoxy(3,1);
  2873.             wputs("Enter phone:");
  2874.             strsetsz(&str2,7);
  2875.             winpdef(3,15,str2,'#');
  2876.             winpread();
  2877.             wprintf("Name is %s, phone is %s\n",str1,str2);
  2878.  
  2879.  
  2880.                                       48   
  2881.  
  2882.  
  2883. Name:       winpread
  2884. Purpose:    processes keyboard input of all defined areas of active window
  2885.             allowing editing back and forth between defined fields.  When
  2886.             carriage return is pressed in the last field, all fields will be
  2887.             processed. If the Escape key is pressed while Escape checking is
  2888.             on, all defined fields will be cancelled and an error code will be
  2889.             returned.  Valid editing keys are:  BackSpace, Ctrl-End,
  2890.             Ctrl-Enter, Ctrl-Home, Del, End, Enter, Esc, Home, Ins, Shift-Tab,
  2891.             Tab, and the arrow keys.
  2892. Prototype:  int winpread(void);
  2893. Header:     tcxlwin.h
  2894. Inputs:     none
  2895. Return:     a zero if no error, see TCXLWIN.H for return codes
  2896. Also see:   winpdef winpxcel wtextattr
  2897.  
  2898.  
  2899. Name:       winputsf
  2900. Purpose:    inputs a formatted string from the keyboard within a window
  2901. Prototype:  int winputsf(char *str,char *fmt);
  2902. Header:     tcxlwin.h
  2903. Inputs:     str     - address of the allocated space to receive string
  2904.             fmt     - address of the format string, see section on using format
  2905.                       strings
  2906. Return:     a zero if no error, see TCXLWIN.H for return codes
  2907. Also see:   wgetns wgets winpdef wscanf wtextattr
  2908. Example:
  2909.             char str[255];
  2910.             wopen(0,0,10,40,0,LMAGENTA|_RED);
  2911.             winputsf(str,!RE!'Enter phone number:  ('###') '###'-'####");
  2912.             wputs("\nYour phone number is:  ");
  2913.             wputs(str);
  2914.  
  2915.  
  2916. Name:       winpxcel
  2917. Purpose:    cancels keyboard of all defined areas of active window
  2918. Prototype:  int winpxcel(void);
  2919. Header:     tcxlwin.h
  2920. Inputs:     none
  2921. Return:     a zero if no error, see TCXLWIN.H for return codes
  2922. Also see:   winpdef winpread
  2923. Example:
  2924.             char *str1="                    ";
  2925.             wopen(0,0,10,40,0,LCYAN|_BLUE);
  2926.             wgotoxy(1,1);
  2927.             wputs("Enter name:");
  2928.             winpdef(1,15,str1,'M');
  2929.             winpxcel();
  2930.             wgotoxy(3,1);
  2931.             wputs("Enter phone:");
  2932.             winpdef(3,15,str1,'#');
  2933.             winpread();
  2934.             wprintf("phone is %s\n",str1);
  2935.  
  2936.  
  2937. Name:       wintodisk
  2938.  
  2939.  
  2940.                                       49   
  2941. Purpose:    copies a screen window to a disk file
  2942. Prototype:  int wintodisk(int srow,int scol,int erow,int ecol,char *fname);
  2943. Header:     tcxlwin.h
  2944. Inputs:     srow    - starting row
  2945.             scol    - starting column
  2946.             erow    - ending row
  2947.             ecol    - ending column
  2948.             fname   - address of the string containing file to write to
  2949. Return:     a zero if no error
  2950. Also see:   disktowin scrntodisk wsave
  2951. Example:
  2952.             if(wintodisk(10,10,20,20,"WINDOW.DAT")) {
  2953.                 printf("Error creating file\n");
  2954.                 exit(1);
  2955.             }
  2956.  
  2957.  
  2958. Name:       wisactiv
  2959. Purpose:    determines if specified window handle is active
  2960. Prototype:  int wisactiv(int whandle);
  2961. Header:     tcxlwin.h
  2962. Inputs:     whandle - the handle of the window to check
  2963. Return:     a zero if handle is not active, a 1 if it is active
  2964. Also see:   wactiv
  2965. Example:
  2966.             printf("handle 5 is %sactive\n",wisactiv(5)?"":"not ");
  2967.  
  2968.  
  2969. Name:       wmbardef
  2970. Purpose:    defines a window bar-selection menu option.  See the section on
  2971.             using bar selection menus for more information.
  2972. Prototype:  int wmbardef(int wrow,int wcol,int attr,char *str,int tagchar);
  2973. Header:     tcxlwin.h
  2974. Inputs:     wrow    - window row to display option at
  2975.             wcol    - window column to display option at
  2976.             attr    - attribute to display option with
  2977.             str     - address of the option string
  2978.             tagchar - tag character to use for identification, must be
  2979.                       alphanumeric, case is insensitive
  2980. Return:     a zero if no error, see TCXLWIN.H for error codes.
  2981. Also see:   wmbarget wmbarxcel
  2982. Example:
  2983.             if(wmbardef(2,3,LCYAN|_BLUE,"Add record",'A')) {
  2984.                 printf("Error:  %s\n",werrmsg());
  2985.                 exit(1);
  2986.             }
  2987.  
  2988.  
  2989. Name:       wmbarget
  2990. Purpose:    gets a window bar menu option from the keyboard.  The user is
  2991.             allowed to use the cursor keys or the specified tag character
  2992.             to select the option.  After a selection is made, all defined
  2993.             options are cleared.  Escape checking is on by default, but can
  2994.             be turned off with the wsetesc() function.  See section on using
  2995.             bar selection menus for more details.
  2996. Prototype:  int wmbarget(int barattr);
  2997. Header:     tcxlwin.h
  2998.  
  2999.  
  3000.                                       50   
  3001. Inputs:     barattr   - the attribute to use for the selection bar
  3002. Return:     the tag character of the selected option or zero if an error
  3003. Also see:   wmbardef wmbarxcel
  3004. Example:
  3005.             option=wmbarget(LCYAN|_GREEN);
  3006.             switch(option) {
  3007.                 case 'A':
  3008.                     ......
  3009.                 case 'D':
  3010.                     ......
  3011.                 case 0:
  3012.                     error_routine();
  3013.                 etc.
  3014.             }
  3015.  
  3016.  
  3017. Name:       wmbarxcel
  3018. Purpose:    cancels all window bar menu options defined before wmbarget() is
  3019.             called.
  3020. Prototype:  int wmbarxcel(void);
  3021. Header:     tcxlwin.h
  3022. Inputs:     none
  3023. Return:     a zero if no error, see TCXLWIN.H for error codes
  3024. Also see:   wmbardef wmbarget
  3025. Example:
  3026.             if(wmbarxcel()) {
  3027.                 printf("Error:  %s\n",werrmsg());
  3028.                 exit(1);
  3029.             }
  3030.  
  3031.  
  3032. Name:       wmove
  3033. Purpose:    moves the currently active window to a new location
  3034. Prototype:  int wmove(int nsrow,int nscol);
  3035. Header:     tcxlwin.h
  3036. Inputs:     nsrow   - new starting row of window
  3037.             nscol   - new starting column of window
  3038. Return:     a zero if no error occurred, see TCXLWIN.H for error codes
  3039. Also see:   wcopy wsize
  3040. Example:
  3041.             wopen(10,10,20,20,2,LCYAN|_BLUE);
  3042.             waitkey();
  3043.             if(wmove(0,0)) {
  3044.                 printf("Error:  %s\n",werrmsg());
  3045.                 exit(1);
  3046.             }
  3047.  
  3048.  
  3049. Name:       wnopen
  3050. Purpose:    returns the number of open windows
  3051. Prototype:  int wnopen(void);
  3052. Header:     tcxlwin.h
  3053. Inputs:     none
  3054. Return:     the number of open windows
  3055. Also see:   wclose wcloseall wopen
  3056. Example:
  3057.             printf("There are %d windows open\n",wnopen());
  3058.  
  3059.  
  3060.                                       51   
  3061.  
  3062.  
  3063. Name:       wopen
  3064. Purpose:    opens a screen window and makes it active, the cursor location
  3065.             will be initialized to window row 0, column 0, and the text
  3066.             attribute will be initialized to the same attribute as the window
  3067. Prototype:  int wopen(int srow,int scol,int erow,int ecol,int btype,int attr);
  3068. Header:     tcxlwin.h
  3069. Inputs:     srow    - starting row, upper left corner
  3070.             scol    - starting column, upper left corner
  3071.             erow    - ending row, lower right corner
  3072.             ecol    - ending column, lower right corner
  3073.             btype   - box type (0-5)
  3074.             attr    - attribute of window
  3075. Return:     the window handle of the new window or a zero if an error occurred,
  3076.             the error code will be in the global variable _werrno, see
  3077.             TCXLWIN.H for error codes
  3078. Also see:   videoinit wactiv wclose wcloseall wnopen
  3079. Example:
  3080.             wopen(10,10,20,20,0,LCYAN|_BLUE);
  3081.  
  3082.  
  3083. Name:       wpgotoxy
  3084. Purpose:    plots pseudo cursor coordinates within the currently active window
  3085.             by wrapping around if coordinates are out of range
  3086. Prototype:  int wpgotoxy(int wrow,int wcol);
  3087. Header:     tcxlwin.h
  3088. Inputs:     wrow    - window row
  3089.             wcol    - window column
  3090. Return:     a zero if no error, see TCXLWIN.H for error codes
  3091. Also see:   wactiv wgotoxy wreadcur
  3092. Example:
  3093.             wopen(0,0,10,10,0,YELLOW|_BLUE);
  3094.             wpgotoxy(3,20);
  3095.             wputs("Hello");
  3096.  
  3097.  
  3098. Name:       wprintc
  3099. Purpose:    prints a character in the currently active window, does not adjust
  3100.             cursor position, recognizes no control codes
  3101. Prototype:  int wprintc(int row,int col,int attr,int ch);
  3102. Header:     tcxlwin.h
  3103. Inputs:     row     - cursor row (of the window)
  3104.             col     - cursor column (of the window)
  3105.             attr    - character attribute
  3106.             ch      - character
  3107. Return:     a zero if no error, see TCXLWIN.H for error codes
  3108. Also see:   wactiv wputc
  3109. Example:
  3110.             wopen(10,10,20,20,0,WHITE|_GREEN);
  3111.             wprintc(11,11,7,"T");
  3112.  
  3113.  
  3114. Name:       wprintf
  3115. Purpose:    outputs a formatted string to active window, works just like
  3116.             printf() does
  3117. Prototype:  int wprintf(const char *format,...);
  3118.  
  3119.  
  3120.                                       52   
  3121. Header:     tcxlwin.h
  3122. Inputs:     format  - format string, refer to Turbo C manual under printf()
  3123.             ...     - any additional arguments
  3124. Return:     a zero if no error, see TCXLWIN.H for return codes
  3125. Also see:   wactiv wputc wputns wputs wtextattr
  3126. Example:
  3127.             char str="world";
  3128.             wopen(0,0,10,20,0,LMAGENTA|_RED);
  3129.             wprintf("Hello, %s\n",str);
  3130.  
  3131.  
  3132. Name:       wprints
  3133. Purpose:    prints a string in the currently active window, does not adjust
  3134.             cursor position, recognizes no control codes
  3135. Prototype:  int wprints(int row,int col,int attr,char *str);
  3136. Header:     tcxlwin.h
  3137. Inputs:     row     - cursor row (of the window)
  3138.             col     - cursor column (of the window)
  3139.             attr    - attribute
  3140.             str     - address of string
  3141. Return:     a zero if no error, see TCXLWIN.H for error codes
  3142. Also see:   wactiv wprintf wputns wputs
  3143. Example:
  3144.             wopen(10,10,20,20,0,WHITE|_GREEN);
  3145.             wprints(11,11,7,"Hello");
  3146.             waitkey();
  3147.             wclose();
  3148.  
  3149.  
  3150. Name:       wputc
  3151. Purpose:    prints a character in currently active window at current cursor
  3152.             location, uses attribute set by the wtextattr() function,
  3153.             recognizes the '\n', '\r', '\t', '\7' and '\b' control characters
  3154. Prototype:  int wputc(int ch);
  3155. Header:     tcxlwin.h
  3156. Inputs:     ch  - the character to be printed
  3157. Return:     a zero if no error, see TCXLWIN.H for error codes
  3158. Also see:   wactiv wprintc wprintf wtextattr
  3159. Example:
  3160.             wopen(10,10,20,20,0,WHITE|_GREEN);
  3161.             wgotoxy(5,5);
  3162.             wtextattr(LMAGENTA|BLINK);
  3163.             wputc('X');
  3164.  
  3165.  
  3166. Name:       wputns
  3167. Purpose:    prints a string in the active window, formatting width of output,
  3168.             uses attribute set by the wtextattr() function, recognizes the
  3169.             '\n', '\r', '\t', '\7' and '\b' control characters
  3170. Prototype:  int wputns(char *str,int width);
  3171. Header:     tcxlwin.h
  3172. Inputs:     str     - address of the string to print
  3173.             width   - width to display output string with
  3174. Return:     a zero if no error, see TCXLWIN.H for error codes
  3175. Also see:   wactiv wprintf wprints wputs wtextattr
  3176. Example:
  3177.             wopen(10,10,20,20,2,WHITE|_GREEN);
  3178.  
  3179.  
  3180.                                       53   
  3181.             wtextattr(LMAGENTA|BLINK);
  3182.             wputns("Hello, world",5);
  3183.  
  3184.  
  3185. Name:       wputs
  3186. Purpose:    prints a string in currently active window at the current cursor
  3187.             location, uses attribute set by the wtextattr() function,
  3188.             recognizes the '\n', '\r', '\t', '\7' and '\b' control characters
  3189. Prototype:  int wputs(char *str);
  3190. Header:     tcxlwin.h
  3191. Inputs:     str     - the address of the string to print
  3192. Return:     a zero if no error, see TCXLWIN.H for error codes
  3193. Also see:   wactiv wprintf wprints wputns wtextattr
  3194. Example:
  3195.             wopen(10,10,20,20,0,WHITE|_GREEN);
  3196.             wgotoxy(1,1);
  3197.             wtextattr(LMAGENTA|BLINK);
  3198.             wputs("Hello, world");
  3199.  
  3200.  
  3201. Name:       wrestore
  3202. Purpose:    restores a previously saved window of screen memory
  3203. Prototype:  void wrestore(int *wbuf);
  3204. Header:     tcxlwin.h
  3205. Inputs:     wbuf    - address of previously saved window
  3206. Return:     none
  3207. Also see:   srestore wsave wunhide
  3208. Example:
  3209.             int *wbuf;
  3210.             wbuf=wsave(7,7,18,60);
  3211.             clrscrn();
  3212.             wrestore(wbuf);
  3213.  
  3214.  
  3215. Name:       wsave
  3216. Purpose:    saves a window of screen memory
  3217. Prototype:  int *wsave(int srow,int scol,int erow,int ecol);
  3218. Header:     tcxlwin.h
  3219. Inputs:     srow    - starting row, upper left corner
  3220.             scol    - starting column, upper left corner
  3221.             erow    - ending row, lower right corner
  3222.             ecol    - ending column, lower right corner
  3223. Return:     address of newly created window buffer or 0 if a memory allocation
  3224.             error occurred.
  3225. Also see:   ssave videoinit whide wintodisk wrestore
  3226. Example:
  3227.             int *wbuf;
  3228.             wbuf=wsave(7,7,18,60);
  3229.             clrscrn();
  3230.             wrestore(wbuf);
  3231.  
  3232.  
  3233. Name:       wscanf
  3234. Purpose:    inputs a formatted string from the keyboard, works just like
  3235.             scanf() does
  3236. Prototype:  int wscanf(const char *format,...);
  3237. Header:     tcxlwin.h
  3238.  
  3239.  
  3240.                                       54   
  3241. Inputs:     format  - format string, refer to Turbo C manual under scanf()
  3242.             ...     - any additional arguments
  3243. Return:     a zero if no error, see TCXLWIN.H for return codes
  3244. Also see:   wactiv wgetc wgets winpdef winputsf wtextattr
  3245.  
  3246.  
  3247. Name:       wscroll
  3248. Purpose:    scrolls text within the active window, up or down
  3249. Prototype:  int wscroll(int count,int direction);
  3250. Header:     tcxlwin.h
  3251. Inputs:     count       - number of lines to scroll
  3252.             direction   - a 0 to scroll down or non-zero to scroll up
  3253. Return:     a zero if no error, see TCXLWIN.H for error codes
  3254. Also see:   wactiv
  3255. Example:
  3256.             wopen(10,10,20,20,0,WHITE|_GREEN);
  3257.             wprints(11,11,7,"Hello");
  3258.             waitkey();
  3259.             wscroll(2,DOWN);
  3260.  
  3261.  
  3262. Name:       wsetesc
  3263. Purpose:    sets the Escape checking for window keyboard input functions that
  3264.             allow Escape checking
  3265. Prototype:  int wsetesc(int option);
  3266. Header:     tcxlwin.h
  3267. Inputs:     option  - (0-1), 0 = turn Escape checking off, 1 = turn Escape
  3268.                       checking on
  3269. Return:     a zero if no error, see TCXLWIN.H for error codes
  3270. Also see:   wgetchf wgetns winputsf wmbarread winpread
  3271. Example:
  3272.             wsetesc(ON);    /* turns Escape checking on */
  3273.  
  3274.  
  3275. Name:       wsize
  3276. Purpose:    adjusts the size of the active window
  3277. Prototype:  int wsize(int nerow,int necol);
  3278. Header:     tcxlwin.h
  3279. Inputs:     nerow   - new end row of sized window
  3280.             necol   - new end column of sized window
  3281. Return:     a zero if no error, see TCXLWIN.H for error codes
  3282. Also see:   wactiv wcopy wmove
  3283. Example:
  3284.             wopen(10,10,20,20,0,WHITE|_GREEN);
  3285.             waitkey();
  3286.             wsize(23,40);
  3287.             waitkey();
  3288.             wsize(15,15);
  3289.  
  3290.  
  3291. Name:       wtextattr
  3292. Purpose:    sets the default text attribute used by most windowing functions
  3293. Prototype:  int wtextattr(int attr);
  3294. Header:     tcxlwin.h
  3295. Inputs:     attr    - the new text attribute
  3296. Return:     a zero if no error, see TCXLWIN.H for error codes
  3297. Also see:   attrib wchgattr
  3298.  
  3299.  
  3300.                                       55   
  3301. Example:
  3302.             wopen(10,10,20,20,0,WHITE|_GREEN);
  3303.             wgotoxy(1,1);
  3304.             wtextattr(LMAGENTA|BLINK);
  3305.             wputs("Hello, world");
  3306.  
  3307.  
  3308. Name:       wunhide
  3309. Purpose:    unhides a previously hidden window
  3310. Prototype:  int *wunhide(int **wbuf);
  3311. Header:     tcxlwin.h
  3312. Inputs:     wbuf    - address of the pointer to the window buffer to unhide
  3313. Return:     the address of the unhidden window's buffer or a 0 if a memory
  3314.             allocation error occurred
  3315. Also see:   whide wrestore
  3316. Example:
  3317.             wopen(0,0,15,50,0,LCYAN|_BLUE);
  3318.             waitkey();
  3319.             whide(&_wrecord[_wcurrent].wbuf);
  3320.             waitkey();
  3321.             wunhide(&_wrecord[_wcurrent].wbuf);
  3322.  
  3323.  
  3324.  
  3325.  
  3326.  
  3327.  
  3328.  
  3329.  
  3330.  
  3331.  
  3332.  
  3333.  
  3334.  
  3335.  
  3336.  
  3337.  
  3338.  
  3339.  
  3340.  
  3341.  
  3342.  
  3343.  
  3344.  
  3345.  
  3346.  
  3347.  
  3348.  
  3349.  
  3350.  
  3351.  
  3352.  
  3353.  
  3354.  
  3355.  
  3356.  
  3357.  
  3358.  
  3359.  
  3360.                                       56   
  3361.  
  3362.                               Global Variables
  3363.                               ----------------
  3364.  
  3365. Name:       _videoseg
  3366. Purpose:    contains the current video RAM segment address used by direct
  3367.             screen writes
  3368. Type:       unsigned
  3369.  
  3370.  
  3371. Name:       _wcurrent
  3372. Purpose:    contains the array subscript of the window record that is currently
  3373.             active
  3374. Type:       int
  3375.  
  3376.  
  3377. Name:       _werrno
  3378. Purpose:    contains the error code from the most recently performed windowing
  3379.             function.  See TCXLWIN.H for error codes.
  3380. Type:       int
  3381.  
  3382.  
  3383. Name:       _wesc
  3384. Purpose:    Escape key checking flag.  This is set by the wsetesc() function
  3385.             and used by several window keyboard input functions.
  3386. Type:       int
  3387.  
  3388.  
  3389. Name:       _whandle
  3390. Purpose:    contains the last handle number given to a window
  3391. Type:       int
  3392.  
  3393.  
  3394. Name:       _winpcurr
  3395. Purpose:    contains the subscript of the window input record array
  3396. Type:       int
  3397.  
  3398.  
  3399. Name:       _winprec
  3400. Purpose:    a pointer to an array of defined window input records
  3401. Type:       struct _winprec *  (see TCXLWIN.H for definition)
  3402.  
  3403.  
  3404. Name:       _wmbarlast
  3405. Purpose:    contains the array subscript of the highest defined bar-menu option
  3406. Type:       int
  3407.  
  3408.  
  3409. Name:       _wmbarrec
  3410. Purpose:    a pointer to the array of defined bar-menu options
  3411. Type:       struct _wmbarrec *  (See TCXLWIN.H for definition)
  3412.  
  3413.  
  3414. Name:       _wrecord
  3415. Purpose:    a pointer to an array of window records which contains window
  3416.             handles and window buffer pointers
  3417. Type:       struct _wrecord *  (see TCXLWIN.H for definition)
  3418.  
  3419.  
  3420.                                       57   
  3421.  
  3422.  
  3423.  
  3424.  
  3425.  
  3426.  
  3427.  
  3428.  
  3429.  
  3430.  
  3431.  
  3432.  
  3433.  
  3434.  
  3435.  
  3436.  
  3437.  
  3438.  
  3439.  
  3440.  
  3441.  
  3442.  
  3443.  
  3444.  
  3445.  
  3446.  
  3447.  
  3448.  
  3449.  
  3450.  
  3451.  
  3452.  
  3453.  
  3454.  
  3455.  
  3456.  
  3457.  
  3458.  
  3459.  
  3460.  
  3461.  
  3462.  
  3463.  
  3464.  
  3465.  
  3466.  
  3467.  
  3468.  
  3469.  
  3470.  
  3471.  
  3472.  
  3473.  
  3474.  
  3475.  
  3476.  
  3477.  
  3478.  
  3479.  
  3480.                                       58   
  3481.